没写完,存一下
查看原帖
没写完,存一下
1042321
I_am_a_rookie_O楼主2023/10/26 15:35

using namespace std;

#define ll long long

ll 
L[100010],R[100010],add[100010],a[100010],pos[100010];

void change(int b,int c){

    int p=pos[b],q=pos[c];
    if(pos[b]==pos[c])
	{
        for(int i=b;i<=c;i++){
            a[i]=(a[i]+1)%2;
        }
    } 
	else
    {
        for(int i=pos[b]+1;i<=pos[c]-1;i++) 
		add[i]++;
        for(int i=b;i<=R[pos[b]];i++) 
		a[i]=(a[i]+1)%2;
        for(int i=L[pos[c]];i<=c;i++) 
		a[i]=(a[i]+1)%2;
    }
}
int find(int b,int c){
    ll ans=0;
    for(int i=b;i<=c;i++)+
	{
        if ((a[i]+add[pos[i]])%2==1){
            ans++;
        }
    }
    return ans;
}
int main(){
    ll n,m;
    memset(a,0,sizeof(a));
    scanf("%lld%lld",&n,&m);
    int t=sqrt(n);
    for(int i=1;i<=t;i++){
        L[i]=(i-1)*t+1;R[i]=i*t;
    }
    if (R[t]<n){
        t++;L[t]=R[t-1]+1;R[t]=n;
    }
    for(int i=1;i<=t;i++){
        for(int j=L[i];j<=R[i];j++){
            pos[j]=i;
        }
    }
    for(int i=1;i<=m;i++){
        ll kkk,b,c;
        scanf("%lld%lld%lld",&kkk,&b,&c);
        if(kkk==0){
            change(b,c);
        } else
        {
            printf("%d\n",find(b,c));
        }
    }
    return 0;
}
2023/10/26 15:35
加载中...