感觉和TJ差不多,但是全WA,求助
查看原帖
感觉和TJ差不多,但是全WA,求助
724981
_DeadPig_楼主2023/1/9 15:46

RT 代码如下

#include<bits/stdc++.h>
#define int long long
using namespace std;

const int maxn=100005;

int n,m,t[maxn*4],lazy[maxn*4];

void Pushup(int k){
    t[k]=t[k<<1]+t[k<<1|1];
}
void Pushdown(int l,int r,int k){ 
	if(lazy[k]==0)return;
    lazy[k<<1]^=1;
    lazy[k<<1|1]^=1;
	int m=(l+r)>>1;
    t[k<<1]=(m-l+1)-t[k<<1];
    t[k<<1|1]=(r-m)-t[k<<1|1];   
    lazy[k]=0; 
    return;
}

void updata(int L,int R,int l,int r,int k){ 
    if(L<=l&&r<=R){  
		t[k]=(r-l+1)-t[k];
        lazy[k]^=1;
        return;
    }else{
        Pushdown(l,r,k); 
        int m=(l+r)>>1;
        if(L<=m){ 
            updata(L,R,l,m,k<<1);
        }
        if(R>m){  
            updata(L,R,m+1,r,k<<1|1);
        }
        Pushup(k);  
    }
}

int query(int L,int R,int l,int r,int k){
    if(L<=l&&r<=R){
        return t[k];
    }else{
        Pushdown(l,r,k);
        int a,b; 
        int m=(l+r)>>1;
        if(L<=m){ 
            a=query(L,R,l,m,k<<1);
        }
        if(R>m){
            b=query(L,R,m+1,r,k<<1|1);
        }
        return a+b;
    }
}

signed main(){
    scanf("%lld%lld",&n,&m);
    for(int i=1;i<=m;i++){
        int opt,x,y;
        scanf("%lld",&opt);
        if(opt==0){
            cin>>x>>y;
            updata(x,y,1,n,1);
        }else{
            scanf("%lld%lld",&x,&y);
            printf("%lld\n",query(x,y,1,n,1));
        }
    }
    return 0;
}
2023/1/9 15:46
加载中...