版权声明:转载请附上地址 https://blog.csdn.net/weixin_44574520/article/details/89786130
luogu 3870
Code:
#include <bits/stdc++.h>
using namespace std;
#define maxn 100010
#define maxm 100010
#define mid ((l+r)>>1)
#define lson l,mid,nod<<1
#define rson mid+1,r,nod<<1|1
int n,m,a[maxn],tree[maxn<<2],lazy[maxn<<2];
inline void xiugai_(int l,int r,int nod) {
tree[nod]=(r-l+1)-tree[nod];
lazy[nod]^=1;
}
inline void pushdown_(int l,int r,int nod) {
if(!lazy[nod]) return;
xiugai_(lson);xiugai_(rson);
lazy[nod]=0;
}
inline void pushup_(int nod) {
tree[nod]=tree[nod<<1]+tree[nod<<1|1];
}
inline void build_(int l,int r,int nod) {
if(l==r) {
tree[nod]=a[l];
return;
}
build_(lson);
build_(rson);
pushup_(nod);
}
inline void update_(int l,int r,int nod,int LL,int RR) {
if(LL<=l&&RR>=r) {
xiugai_(l,r,nod);
return;
}
pushdown_(l,r,nod);
if(LL<=mid) update_(lson,LL,RR);
if(RR>mid) update_(rson,LL,RR);
pushup_(nod);
}
inline int query_(int l,int r,int nod,int LL,int RR) {
if(LL<=l&&RR>=r) return tree[nod];
pushdown_(l,r,nod);
int ans=0;
if(LL<=mid) ans+=query_(lson,LL,RR);
if(RR>mid) ans+=query_(rson,LL,RR);
return ans;
}
inline void init_() {
freopen("a.txt","r",stdin);
}
inline int read_() {
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9') {
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9') {
x=x*10+c-'0';
c=getchar();
}
return x*f;
}
inline void clean_() {
memset(tree,0,sizeof(tree));
memset(lazy,0,sizeof(lazy));
memset(a,0,sizeof(a));
}
inline void readda_() {
clean_();
n=read_();m=read_();
build_(1,n,1);
int p,x,y;
while(m--) {
p=read_();x=read_();y=read_();
if(p==0) {
update_(1,n,1,x,y);
}
else if(p==1) {
printf("%d\n",query_(1,n,1,x,y));
}
}
}
int main() {
init_();
readda_();
return 0;
}