玄关为何运行时出错
  • 板块灌水区
  • 楼主chty
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/1/17 17:57
  • 上次更新2025/1/17 21:22:04
查看原帖
玄关为何运行时出错
1162593
chty楼主2025/1/17 17:57
#include<bits/stdc++.h>
using namespace std;
struct fdd{
	long long l,r,h,la;
}a[400005];
long long b[100005];
long long n,m;
void push_d(long long  u){
    int len=a[u].r-a[u].l+1;
	a[u*2].la^=1;
    a[u*2].h=(len-len/2)-a[u*2].h;
    a[u*2+1].la^=1;
    a[u*2+1].h=(len-len/2)-a[u*2].h;
    a[u].la=0;
	return;
}
void biu(long long u,long long l,long long r){
	a[u].l=l;
	a[u].r=r;
	if(l==r){
		a[u].h=b[l];
		return;
	}
	long long mid=(l+r)/2;
	biu(u*2,l,mid);
	biu(u*2+1,mid+1,r);
	a[u].h=a[u*2].h+a[u*2+1].h;
}
void dd(long long u,long long z,long long y){
	push_d(u);
    if(a[u].l>=z&&a[u].r<=y){
        a[u].la^=1;
        a[u].h=a[u].r-a[u].l+1-a[u].h;
        return;
    }
    int mid=(a[u].l+a[u].r)/2;
    if(a[u].l<=mid) dd(u*2,z,y);
    if(mid<a[u].r) dd(u*2+1,z,y);
    a[u].h=a[u*2].h+a[u*2+1].h;
}
long long ask(long long k,long long x,long long y){
	if(a[k].l>=x&&a[k].r<=y) return a[k].h;
	push_d(k);
    long long ans=0;
	long long mid=(a[k].l+a[k].r)/2;
	if(x<=mid) ans+=ask(k*2,x,y);
	if(y>mid) ans+=ask(k*2+1,x,y);
	return ans;
}
int main(){

	cin>>n>>m;
    string s;
    cin>>s;
	for(long long i=1;i<=n;i++){
		b[i]=s[i-1];
	}
    
	biu(1,1,n);
	while(m--){
    
		long long k,l,r;
		cin>>k>>l>>r;
        
        if(k==0){
        
            dd(1,l,r);
        }else{
            cout<<ask(1,l,r)<<endl;
        }
	}
	return 0;
}

2025/1/17 17:57
加载中...