所以哪里错了
  • 板块P2574 XOR的艺术
  • 楼主masa
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/10/16 21:45
  • 上次更新2023/11/4 03:34:12
查看原帖
所以哪里错了
65600
masa楼主2021/10/16 21:45
#include<bits/stdc++.h>
using namespace std;
int n,m,a[200010],sum;
char c[200010];
struct stt{
    int l,r,sum,add;	
}t[800010];
void make(int s,int l,int r)
{
	t[s].l=l;
	t[s].r=r;
	if(l==r)
	{
		t[s].sum=a[l];
		return;
	}
	int mid=(l+r)>>1;
	make(s*2,l,mid);
	make(s*2+1,mid+1,r);
	t[s].sum=t[s*2].sum+t[s*2+1].sum;
}
void print(int s)
{
	cout<<t[s].l<<" "<<t[s].r<<" "<<t[s].sum<<endl;
	if(t[s].l==t[s].r){
//		cout<<t[s].sum;
		return;
	}
	print (s*2);
	print(s*2+1);
}
void pushdown(int s)
{
	if(t[s].l==t[s].r)return;
	while(t[s].sum>1)t[s].sum-=2;
	if(t[s].sum==1)
	{
		int p=s*2;
		t[p].add++;
		t[p+1].add++;
		t[p].sum=t[p].r-t[p].l+1-t[p].sum;
		t[p+1].sum=t[p+1].r-t[p+1].l+1-t[p+1].sum;
		t[s].sum=0;
	}
}
void change(int s,int l,int r)
{
	if(l<=t[s].l&&r>=t[s].r)
	{
		t[s].add++;
		t[s].sum=t[s].r-t[s].l+1-t[s].sum;
		return;
	}
	pushdown(s);
    int mid=(t[s].r+t[s].l)>>1;
    if(mid<l)change(s*2+1,l,r);
    else if(mid>=r)change(s*2,l,r);
    else change(s*2,l,r),change(s*2+1,l,r);
	t[s].sum=t[s*2].sum+t[s*2+1].sum;
}
int search(int s,int l,int r)
{
	//cout<<s<<endl;
	if(l<=t[s].l&&r>=t[s].r)
	{
		
		return t[s].sum;
	}
	pushdown(s);
    int mid=(t[s].r+t[s].l)>>1;
    if(mid<l) return search(s*2+1,l,r);
    else if(mid>=r) return search(s*2,l,r);
    else  return search(s*2,l,r)+search(s*2+1,l,r);
}
int main()
{
	int l,r;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>c[i];
		a[i]=c[i]-'0';
	}
	make(1,1,n);
	print(1);
	cout<<"\n";
	for(int i=1;i<=m;i++)
	{
		sum=0;
		cin>>a[0]>>l>>r;
		if(a[0]==0)
		{
			change(1,l,r);
			cout<<"\n";
			print(1);
			cout<<"\n";
		}
		if(a[0]==1)
		{
			
			cout<<search(1,l,r)<<endl;
		}
		
	}
}
2021/10/16 21:45
加载中...