救救孩子吧

灌水区

@[smile_jyc](/user/1246532) 你这个线段树写的不伦不类。 1. `update1()` 好像没用 2. `update(2*u,L,mid,l,r,x); update(2*u+1,mid+1,R,l,r,x);` 这个要条件限制的,不然会RE/MLE吧? 3. query也是
by da_ke @ 2024-04-21 20:38:58


```cpp #include <bits/stdc++.h> #define rep(i,l,r) for(int i=(l);i<=(r);++i) using namespace std; typedef long long ll; const int N=2e5+23; int len=0,Q,D; int mx[4*N]; inline void update(int s,int v,int l,int r,int p) { int lc=p<<1,rc=p<<1|1,mid=l+((r-l)>>1); if(l==r){mx[p]=v;return ;} if(s<=mid) update(s,v,l,mid,lc); if(s>mid) update(s,v,mid+1,r,rc); mx[p]=max(mx[lc],mx[rc]); } inline int query(int s,int t,int l,int r,int p) { int lc=p<<1,rc=p<<1|1,mid=l+((r-l)>>1); if(s<=l&&r<=t) return mx[p]; int ans=-1<<30; if(s<=mid) ans=max(ans,query(s,t,l,mid,lc)); if(t>mid) ans=max(ans,query(s,t,mid+1,r,rc)); return ans; } int main() { int t=0; cin>>Q>>D; rep(i,1,Q) { char opt; ll n; cin>>opt>>n; if(opt=='A'){len++;update(len,(n+t)%D,1,Q,1);} if(opt=='Q'){t=query(len-n+1,len,1,Q,1)%D;cout<<t<<endl;} } } ``` 送你魔板 ```
by da_ke @ 2024-04-21 20:40:50


主播你的 lazy tag 下放到节点时更新错了 w,而且 update1 没有下放 lazy tag,而且 query 钟不在区间内的应该返回极大值(因为查询最小值)
by yukimianyan @ 2024-04-21 20:50:21


@[yukimianyan](/user/509229) ta 的 update1 好像没用,所以不用管他
by da_ke @ 2024-04-21 20:51:19


就想象一下给整个数列 +1,最小值怎么变化,不是 `w[u]+=(R-L+1)*x;`
by yukimianyan @ 2024-04-21 20:51:46


```cpp void maketag(int u,int L,int R,long long x){ lzy[u]+=x; w[u]+=x; } ```
by da_ke @ 2024-04-21 20:52:47


这另一位主播是对的
by yukimianyan @ 2024-04-21 20:53:49


哪个题?
by Zhouzimu_by53 @ 2024-04-21 21:12:24


|