玄关,有没有大佬可以解释一下它为什么厌氧?
查看原帖
玄关,有没有大佬可以解释一下它为什么厌氧?
640259
hui_du楼主2024/7/1 15:51

P3870 [TJOI2009] 代码如下:

#include<bits/stdc++.h>
using namespace std;
#define ll int
#define dd double
#define endl "\n"
#define pp p<<1
#define ppp p<<1|1
const int N=2e5+10,inf=0x7fffffff;
ll n,q,now[N<<2],sign[N<<2];

ll pushup(ll s,ll t,ll p){
	ll m=(s+t)>>1;
	sign[pp]+=sign[p];
	sign[ppp]+=sign[p];
	sign[pp]=sign[pp]&1;
	sign[ppp]=sign[ppp]&1;
	if(sign[p]&1)
		now[pp]=m-s+1-now[pp];
	if(sign[p]&1)
		now[ppp]=t-m-now[ppp];
	sign[p]=0;
}

ll getm(ll s,ll t,ll l,ll r,ll p){
	if(l<=s&&t<=r)
		return now[p];	
	pushup(s,t,p);
	ll m=(s+t)>>1,res=0;
	if(l<=m)res=getm(s,m,l,r,pp);
	if(r>m)res+=getm(m+1,t,l,r,ppp);
	return res;
}
void update(ll s,ll t,ll l,ll r,ll p){
	if(l<=s&&t<=r){
		now[p]=t-s+1-now[p];
		sign[p]++;
		sign[p]=sign[p]&1;
		return ;
	}
	pushup(s,t,p);
	ll m=(s+t)>>1;
	if(l<=m)update(s,m,l,r,pp);
	if(r>m)update(m+1,t,l,r,ppp);
	now[p]=now[pp]+now[ppp];
}
int main(){
	ios::sync_with_stdio(0);
	cin>>n>>q;
	while(q--){
		ll c,a,b;
		cin>>c>>a>>b;
		if(c)
			cout<<getm(1,n,a,b,1)<<endl;
		else
			update(1,n,a,b,1);
	}
}
2024/7/1 15:51
加载中...