离离原上谱——%=2出现48
  • 板块学术版
  • 楼主lrj3247
  • 当前回复9
  • 已保存回复9
  • 发布时间2024/7/4 20:01
  • 上次更新2024/7/4 22:27:13
查看原帖
离离原上谱——%=2出现48
983702
lrj3247楼主2024/7/4 20:01

题目传送门

那位巨佬帮我这个蒟蒻看看。第49行和51行,lm和rm%=2为什么会输出48和49? 不应该只是为1或0吗?

#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 20:01
加载中...