线段树模板求调

P5057 [CQOI2006] 简单题

注释还乱码了啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 ```cpp #include <iostream> #include <cstdio> #include <cmath> using namespace std; #define ll long long const int Maxn=1e5+10; int tree[Maxn<<2],lazy[Maxn<<2]; int x,y; int a; int ans; void pushDown(int l,int r,int p) { int mid=(l+r)>>1,le=p<<1,ri=p<<1|1; tree[le]+=lazy[p]*(mid-l+1); lazy[le]+=lazy[p]; tree[ri]+=lazy[p]*(r-mid); lazy[ri]+=lazy[p]; lazy[p]=0; } void build(int l,int r,int p) { if(l==r) { tree[p]=0; return ; } ll mid=(l+r)>>1,le=p<<1,ri=p<<1|1; build(l,mid,le); build(mid+1,r,ri); tree[p]=tree[le]+tree[ri]; } void update(int l,int r,int p) { if(x<=l&&r<=y) { tree[p]+=(r-l+1); lazy[p]++; return ; } pushDown(l,r,p); ll mid=(l+r)>>1,le=p<<1,ri=p<<1|1; if(x<=mid) update(l,mid,le); if(y>mid) update(mid+1,r,ri); tree[p]=tree[le]+tree[ri]; } ll query(int l,int r,int p) { if(l==r) return tree[p]&=1; pushDown(l,r,p); ll mid=(l+r)>>1,le=p<<1,ri=p<<1|1; if(x<=mid) return query(l,mid,le); return query(mid+1,r,ri); } int main() { int n,m;cin>>n>>m; //init build(1,n,1); //建树 while(m--) { int t;cin>>t; if(t==1) { cin>>x>>y; update(1,n,1); } if(t==2) { cin>>a; cout<<query(1,n,1)<<endl; } } //处理 return 0; } /* in1: 20 10 1 1 10 2 6 2 12 1 5 12 2 6 2 15 1 6 16 1 11 17 2 12 2 6 out1: 1 0 0 0 1 1 */
by dtrthg @ 2022-08-20 15:25:22


@[dtrthg](/user/379113) ```query```函数里面: ```cpp if(x<=mid) return query(l,mid,le); return query(mid+1,r,ri); ``` 应该改为: ``` if(a<=mid) return query(l,mid,le); return query(mid+1,r,ri); ```
by _Vix_ @ 2022-08-20 15:49:09


@[Zheng07](/user/482965) 谢谢大佬!谢谢ヽ(✿゚▽゚)ノ
by dtrthg @ 2022-08-20 16:00:07


@[dtrthg](/user/379113) %%
by CmathFrog @ 2022-08-21 17:05:19


@[dtrthg](/user/379113) 小猫给树浇水??
by CmathFrog @ 2022-08-21 17:06:00


@[pqpq](/user/769482) 对哇,线段树经验好多(doge)
by dtrthg @ 2022-08-21 18:34:56


> %% 不至于不至于
by dtrthg @ 2022-08-21 18:35:33


@[dtrthg](/user/379113) 小猫
by CmathFrog @ 2022-08-21 20:27:14


|