线段树10分wa求调
查看原帖
线段树10分wa求调
1398428
gaozixuan666楼主2025/2/7 21:26
#include<bits/stdc++.h>
using namespace std;
int n,m,a[800040];
bool tag[800040];
void push_up(int p){
	a[p]=a[p<<1]+a[p<<1|1];
}
void f(int p,int l,int r){
	tag[p]=~tag[p];
	a[p]=(r-l+1)-a[p];
}
void push_down(int p,int l,int r){
	if(tag[p]==0)return ;
	int mid=l+r>>1;
	f(p<<1,l,mid);
	f(p<<1|1,mid+1,r);
	tag[p]=0;
}
void modify(int ll,int rr,int l,int r,int p){
	if(ll<=l&&r<=rr){
		tag[p]=~tag[p];
		a[p]=(r-l+1)-a[p];
		return ;
	}
	push_down(p,l,r);
	int mid=l+r>>1;
	if(ll<=mid)modify(ll,rr,l,mid,p<<1);
	if(rr>mid)modify(ll,rr,mid+1,r,p<<1|1);
	push_up(p);
}
int query(int ll,int rr,int l,int r,int p){
	if(ll<=l&&r<=rr){
		return a[p];
	}
	push_down(p,l,r);
	int mid=l+r>>1;
	return (ll<=mid?query(ll,rr,l,mid,p<<1):0)+(rr>mid?query(ll,rr,mid+1,r,p<<1|1):0);
}
int main(){
	cin>>n>>m;
	while(m--){
		int op,x,y;
		cin>>op>>x>>y;
		if(op==0){
			modify(x,y,1,n,1);
		}else{
			cout<<query(x,y,1,n,1)<<'\n';
		}
	}
}
``````#include<bits/stdc++.h>
using namespace std;
int n,m,a[800040];
bool tag[800040];
void push_up(int p){
	a[p]=a[p<<1]+a[p<<1|1];
}
void f(int p,int l,int r){
	tag[p]=~tag[p];
	a[p]=(r-l+1)-a[p];
}
void push_down(int p,int l,int r){
	if(tag[p]==0)return ;
	int mid=l+r>>1;
	f(p<<1,l,mid);
	f(p<<1|1,mid+1,r);
	tag[p]=0;
}
void modify(int ll,int rr,int l,int r,int p){
	if(ll<=l&&r<=rr){
		tag[p]=~tag[p];
		a[p]=(r-l+1)-a[p];
		return ;
	}
	push_down(p,l,r);
	int mid=l+r>>1;
	if(ll<=mid)modify(ll,rr,l,mid,p<<1);
	if(rr>mid)modify(ll,rr,mid+1,r,p<<1|1);
	push_up(p);
}
int query(int ll,int rr,int l,int r,int p){
	if(ll<=l&&r<=rr){
		return a[p];
	}
	push_down(p,l,r);
	int mid=l+r>>1;
	return (ll<=mid?query(ll,rr,l,mid,p<<1):0)+(rr>mid?query(ll,rr,mid+1,r,p<<1|1):0);
}
int main(){
	cin>>n>>m;
	while(m--){
		int op,x,y;
		cin>>op>>x>>y;
		if(op==0){
			modify(x,y,1,n,1);
		}else{
			cout<<query(x,y,1,n,1)<<'\n';
		}
	}
}
2025/2/7 21:26
加载中...