论%=2出现48这种事
查看原帖
论%=2出现48这种事
983702
lrj3247楼主2024/7/4 19:57

哪位大佬帮我这位蒟蒻看看,49行和51行lm%=2和rm%=2后输出48,就离谱

#include <bits/stdc++.h>
using namespace std;
const int N=5e5+15;
int n,q,op,cl,cr,flag,d[N];
char arr[N];
struct Node{
	int l,r,sum,la;
}tr[N<<2];
void build(int id,int l,int r){
	tr[id]={l,r,0,0};
	if(l==r){
		d[l]=id;
		tr[id].sum=1;
		cout<<"id:"<<id<<" l:"<<l<<" r:"<<r<<" sum:"<<tr[id].sum<<endl;
		return ;
	}
	int mid=l+r>>1;
	build(id<<1,l,mid);
	build(id<<1|1,mid+1,r);
	if(tr[id<<1].sum==1&&tr[id<<1|1].sum==1&&arr[mid]!=arr[mid+1])
	tr[id].sum=1;
	cout<<"id:"<<id<<" l:"<<l<<" r:"<<r<<" sum:"<<tr[id].sum<<endl;
}
void pushdown(int id){
	int la=tr[id].la;
	if(la){
		//int l=tr[id].l,r=tr[id].r,mid=l+r>>1;
		tr[id<<1].la^=1;
		tr[id<<1|1].la^=1;
		tr[id].la=0;
		//不确定要不要加东西 
	}
}
void modify(int id,int x,int y){
	int l=tr[id].l,r=tr[id].r;
	if(x<=l&&r<=y){
		tr[id].la^=1;
		if(l==r) arr[l]^=1;
		cout<<"id:"<<id<<" sum:"<<tr[id].sum<<" la:"<<tr[id].la<<endl;
		//不确定要不要加东西
		return ; 
	}
	pushdown(id);
	int mid=l+r>>1;
	if(x<=mid) modify(id<<1,x,y);
	if(y>mid) modify(id<<1|1,x,y);
	int lm=arr[mid],rm=arr[mid];
	if(tr[id].la){
		lm%=2,rm%=2;
	}
	cout<<"lm:"<<lm<<" rm:"<<rm<<endl;
	if(tr[id<<1].sum==1&&tr[id<<1|1].sum==1&&((tr[id<<1].la==tr[id<<1|1].la&&lm!=rm)||(tr[id<<1].la!=tr[id<<1|1].la&&lm==rm))){
		tr[id].sum=1;
	}
	else{
		tr[id].sum=0;
	}
	cout<<"id:"<<id<<" sum:"<<tr[id].sum<<" la:"<<tr[id].la<<endl;
}
int query(int id,int x,int y){
	int l = tr[id].l , r = tr[id].r;
	if(x<=l&&r<=y){
		cout<<"id:"<<id<<" sum:"<<tr[id].sum<<endl;
		return tr[id].sum;
	}
	int mid=l+r>>1,ret=1;
	if(x<=mid) ret=min(ret,query(id<<1,x,y));
	if(y>mid) ret=min(ret,query(id<<1|1,x,y));
	return ret;
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>n>>q;
	for(int i = 1 ; i<=n ; i++){
		cin>>arr[i];
	}
	build(1,1,n);
	for(int i = 1 ; i<=q ; i++){
		cin>>op>>cl>>cr;
		if(op==1){
			cout<<"id:"<<"4"<<" sum:"<<tr[4].sum<<" la:"<<tr[4].la<<endl;
			modify(1,cl,cr);
		}
		else if(op==2){
			flag=query(1,cl,cr);
			if(flag==0) cout<<"No"<<endl;
			else if(flag==1) cout<<"Yes"<<endl;
		}
	}
	return 0;
}
2024/7/4 19:57
加载中...