HELP!!!HELP!!!

P5057 [CQOI2006] 简单题

@[王茗仟](/user/291604) ``` #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; 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].lazy=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; } ```
by gaojian2007 @ 2022-11-22 19:06:50


|