妹子刚学OI 50pts求调

P1253 扶苏的问题

@[u_lcp](/user/622631) 我来调教你了
by scp020 @ 2024-04-25 20:47:00


@[scp020](/user/553625) 实力
by u_lcp @ 2024-04-25 21:11:54


@[u_lcp](/user/622631) 破案 pushdown写炸了+标记没开long long
by u_lcp @ 2024-04-25 21:13:32


@[u_lcp](/user/622631) 新学OI是吧我的宝,晚上来我家我教你
by small_cabbage @ 2024-04-27 14:46:38


@[small_cabbage](/user/968531) 那还是算了吧,不过...确实刚学OI哦[doge]。
by u_lcp @ 2024-04-28 13:10:38


贴份代码吧 ```cpp #include <bits/stdc++.h> #define pc putchar(' ') #define pe putchar('\n') using namespace std; template<typename T>void read(T& n) { T f=1,k=0;char c=getchar(); while(c>'9'||c<'0'){if(c=='-'){f=-1;}c=getchar();} while(c<='9'&&c>='0'){k=(k<<3)+(k<<1)+c-'0';c=getchar();} n=f*k; } template<typename T>void write(T x) { if(x==0){putchar('0');return;} if(x<0)putchar('-'),x=-x; if(x>9)write(x/10); putchar(x%10+'0'); } const int maxn=1e6+10; #define ls rt<<1 #define rs rt<<1|1 #define mid ((l+r)>>1) #define int long long typedef long long ll; struct sgt { int l,r; bool isfill; int lzyfill,lzyadd; ll mx; }t[maxn<<2]; ll a[maxn]; int n,q; void pushup(int rt) { t[rt].mx=max(t[ls].mx,t[rs].mx); } void build(int rt,int l,int r) { t[rt].l=l; t[rt].r=r; t[rt].isfill=false; t[rt].lzyadd=0; t[rt].lzyfill=0; if(l==r) { t[rt].mx=a[l]; return; } build(ls,l ,mid); build(rs,mid+1,r ); pushup(rt); } void makelzyfill(int rt,ll x,ll d) { t[rt].isfill=true; t[rt].lzyfill=x; t[rt].lzyadd=d; t[rt].mx=x+d; } void makelzyadd(int rt,ll x) { t[rt].mx+=x; t[rt].lzyadd+=x; } void pushdown(int rt) { if(t[rt].isfill) { makelzyfill(ls,t[rt].lzyfill,t[rt].lzyadd); makelzyfill(rs,t[rt].lzyfill,t[rt].lzyadd); t[rt].isfill=false; t[rt].lzyfill=0; t[rt].lzyadd=0; return; } makelzyadd(ls,t[rt].lzyadd); makelzyadd(rs,t[rt].lzyadd); t[rt].lzyadd=0; } void cover(int rt,int ql,int qr,ll x) { int l=t[rt].l,r=t[rt].r; if(ql<=l&&r<=qr) { makelzyfill(rt,x,0); return; } pushdown(rt); if(ql<=mid)cover(ls,ql,qr,x); if(qr>mid) cover(rs,ql,qr,x); pushup(rt); } void update(int rt,int ql,int qr,ll x) { int l=t[rt].l,r=t[rt].r; if(ql<=l&&r<=qr) { makelzyadd(rt,x); return; } pushdown(rt); if(ql<=mid)update(ls,ql,qr,x); if(qr>mid) update(rs,ql,qr,x); pushup(rt); } ll query(int rt,int ql,int qr) { int l=t[rt].l,r=t[rt].r; if(ql<=l&&r<=qr) { return t[rt].mx; } pushdown(rt); ll ans=LONG_LONG_MIN; if(ql<=mid)ans=max(ans,query(ls,ql,qr)); if(qr>mid) ans=max(ans,query(rs,ql,qr)); return ans; } signed main() { read(n),read(q); for(int i=1;i<=n;i++)read(a[i]); build(1,1,n); for(int i=1;i<=q;i++) { int o,l,r;ll x; read(o),read(l),read(r); if(o==1)read(x),cover(1,l,r,x); else if(o==2)read(x),update(1,l,r,x); else write(query(1,l,r)),pe; } return 0; } ```
by u_lcp @ 2024-04-28 13:12:47


|