P2574样例没过,求调!!
  • 板块学术版
  • 楼主2022_37_yzyUUU
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/12/23 09:48
  • 上次更新2023/12/23 10:00:47
查看原帖
P2574样例没过,求调!!
785636
2022_37_yzyUUU楼主2023/12/23 09:48
样例

10 6
1011101001
0 2 4
1 1 5
0 3 7
1 1 10
0 1 4
1 2 6


输出
3
6
1
我输出
3
3
1
#include<iostream>
#define ls(p) p<<1
#define rs(p) p<<1|1
using namespace std;
int n,a[200005],m;
char s[200005];
struct segtree{
	int num,tag,l,r;
	#define l(p) t[p].l
	#define r(p) t[p].r
	#define num(p) t[p].num
	#define tag(p) t[p].tag
	#define op(p) num(p)=num(ls(p))+num(rs(p))
	#define f(p) p=!p
	#define lson ls(p),l,r
	#define rson rs(p),l,r
}t[8000050];
void build(int p,int l,int r){
	l(p)=l,r(p)=r;
	if(l==r){
		num(p)=a[l];
		return;
	}
	int mid=l+r>>1;
	build(ls(p),l,mid);
	build(rs(p),mid+1,r);
	op(p);
}
void down(int p){
	if(tag(p)){
		f(tag(ls(p)));
		f(tag(rs(p)));
		num(ls(p))=r(ls(p))-l(ls(p))+1-num(ls(p));
		num(rs(p))=r(rs(p))-l(rs(p))+1-num(rs(p));
		tag(p)=0;
	}
}
void change(int p,int l,int r){
	if(l<=l(p)&&r(p)<=r){
		num(p)=r(p)-l(p)+1-num(p);
		f(tag(p));
		return;
	}
	down(p);
	int mid=l(p)+r(p)>>1;
	if(l<mid)change(lson);
	else change(rson);
	op(p);
}
int ask(int p,int l,int r){

	if(l<=l(p)&&r(p)<=r)return num(p);
	down(p);
	int ans=0,mid=l(p)+r(p)>>1;
	if(l<mid)ans+=ask(lson);
	else ans+=ask(rson);
	return ans;
}
main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>s[i];
		a[i]=s[i]-'0';
	}
	build(1,1,n);
	for(int i=1;i<=m;i++){
		int o,l,r;
		cin>>o>>l>>r;
		if(!o)change(1,l,r);
		else cout<<ask(1,l,r)<<"\n";
	}
}

2023/12/23 09:48
加载中...