求助,关于字符读入和循环判定
  • 板块P4879 ycz的妹子
  • 楼主Ame__
  • 当前回复3
  • 已保存回复3
  • 发布时间2020/7/29 17:58
  • 上次更新2023/11/6 21:50:46
查看原帖
求助,关于字符读入和循环判定
245875
Ame__楼主2020/7/29 17:58
#include<bits/stdc++.h>
    
#define LL long long

#define ls(o) (o << 1)

#define rs(o) (o << 1 | 1)

#define mid ((l + r) >> 1)

using namespace std;
    
/*Grievous Lady*/
    
template <typename T> void read(T & t){
    t = 0;int f = 1;char ch = getchar();
    while(ch < '0' || ch > '9'){if(ch == '-')f =- 1;ch = getchar();}
    do{t = t * 10 + ch - '0';ch = getchar();}while(ch >= '0' && ch <= '9');t *= f;
}

const int kato = 2e5 + 1;

int n , m;

int a[kato];

struct tree{
    protected:

        LL sum[kato << 2] , tag[kato << 2];

        inline void up(int o){
            sum[o] = sum[ls(o)] + sum[rs(o)];
            tag[o] = tag[ls(o)] + tag[rs(o)];
        }

    public:

        inline void build(int o , int l , int r){
            if(l == r){
                // read(a[l]);
                sum[o] = a[l];
                if(a[l] != 0){
                    tag[o] ++;
                }
                return;
            }
            build(ls(o) , l , mid) , build(rs(o) , mid + 1 , r);
            up(o);
        }

        inline void add(int o , int l , int r , int x , int val){
            if(l == r){
                sum[o] = val , tag[o] = 1;
                return;
            }
            if(x <= mid){
                add(ls(o) , l , mid , x , val);
            }
            else{
                add(rs(o) , mid + 1 , r , x , val);
            }
            up(o);
        }

        inline void Modify(int o , int l , int r , int x , int val){
            if(l == r){
                sum[o] -= val;
                return;
            }
            if(x <= mid){
                Modify(ls(o) , l , mid , x , val);
            }
            else{
                Modify(rs(o) , mid + 1 , r , x , val);
            }
            up(o);
        }

        inline void del(int o , int l , int r , int x){
            if(l == r && x == tag[o]){
                sum[o] = 0 , tag[o] --;
                return;
            }
            if(x <= tag[ls(o)]){
                del(ls(o) , l , mid , x);
            }
            else{
                del(rs(o) , mid + 1 , r , x - tag[ls(o)]);
            }
            up(o);
        }

        inline LL ask(int o){
            return sum[o];
        }

}yuni;

char opt;

inline int Ame_(){
    // freopen("a.in" , "r" , stdin);
    // freopen("a.out" , "w" , stdout);
    read(n);read(m);
    for(int i = 1;i <= n;i ++){
        read(a[i]);
    }
    yuni.build(1 , 1 , kato);
    for(int x , y; m --> 0 ;){
        cerr << m << ' ' << '\n';
        // cin >> opt;
        scanf("%c" , &opt);
        if(opt == 'Q'){
            printf("%lld\n" , yuni.ask(1));
        }
        if(opt == 'C'){
            read(x);read(y);
            yuni.Modify(1 , 1 , kato , x , y);
        }
        if(opt == 'I'){
            read(x);read(y);
            yuni.add(1 , 1 , kato , x , y);
        }
        if(opt == 'D'){
            read(x);
            yuni.del(1 , 1 , kato , x);
        }
    }
    // fclose(stdin);
    // fclose(stdout);
    return 0;
}
    
int Ame__ = Ame_();
    
int main(){;}

对于此代码,本来cin是可以正常判定循环的,但是换成scanf之后会发现以下问题

9 
15
8 
7 
6 
13
5 
4 
3 
19
2 
1 
0 
15

对于m会什么都没有进行独自循环一个循环,想请教一下原因QAQ

2020/7/29 17:58
加载中...