HELP!!!HELP!!!
查看原帖
HELP!!!HELP!!!
291604
王茗仟楼主2022/11/22 17:29

#include<bits/stdc++.h>
#define double long double
#define int128 __int128
#define int long long
#define re register
#define in inline
#define Pi pair<int,int>
#define vi vector<int>
#define max(a,b)  ((a)>(b)?a:b)
#define min(a,b)  ((a)<(b)?a:b)
#define ls x<<1
#define rs x<<1|1
#define dx i+xx[k]
#define dy j+yy[k]
#define debug cout<<"wuyu"<<endl;
using namespace std;
const int INF=0x3f3f3f3f;
const int N=1e6+19;
const int M=1e6+10;
const double eps=1e-5;
in int read(){  re int x=0,f=0;re char c=getchar(); while(!isdigit(c)) f|=(c=='-'),c=getchar(); while(isdigit(c))  x=(x<<3)+(x<<1)+c-'0',c=getchar();   return f?-x:x;}
in void write(re int x){    if(x<0) putchar('-'),x=-x;  if(x>9) write(x/10);    putchar(x%10+'0');}



struct node{
	int l,r;
	int v,lazy;
}tree[N<<3];

int n,m,ans;
int L,R;


void build(int x,int l,int r){
	tree[x].l=l;
	tree[x].r=r;
	if(l==r){
		tree[x].v=0;
		return ;
	}
	int mid=l+r>>1;
	build(ls,l,mid);build(rs,mid+1,r);
	tree[x].v=tree[ls].v+tree[rs].v;
}

void down(int x){
	tree[ls].lazy+=tree[x].lazy;
	tree[rs].lazy+=tree[x].lazy;
	tree[ls].v+=tree[x].lazy*(tree[ls].r-tree[ls].l+1);	
	tree[rs].v+=tree[x].lazy*(tree[rs].r-tree[rs].l+1);
	tree[x].v=0;
}


void add(int x){
	if(tree[x].l>=L&&tree[x].r<=R){
		tree[x].v+=(tree[x].r-tree[x].l+1);
		tree[x].lazy++;
		return ;
	}
	down(x);
	int mid=tree[x].l+tree[x].r>>1;
	if(L<=mid){
		add(ls);
	}
	if(R>mid){
		add(rs);
	}
	tree[x].v=tree[ls].v+tree[rs].v;
}


void ask(int x){
	if(tree[x].l==tree[x].r){
		ans=tree[x].v&1;
		return ;
	}
	down(x);
	int mid=tree[x].l+tree[x].r>>1;
	if(L<=mid){
		ask(ls);
	}
	else{
		ask(rs);
	}
}



signed main(){
	n=read();m=read();
	build(1,1,n);
	for(int i=1;i<=m;i++){
		int opt=read();
		if(opt==1){
			L=read();R=read();
			add(1);
		}
		else{
			L=read();
			ask(1);
			cout<<ans<<endl;
		}
	}
	
	return 0;
}
2022/11/22 17:29
加载中...