1 条题解
-
0
C++ :
#include<bits/stdc++.h> using namespace std; typedef long long lnt; const int N=1E5+5,M=4E5+5; int s[N],mn[M],mx[M],tg[M];lnt sm[M]; inline void update(int t) { int a=t<<1,b=a|1; sm[t]=sm[a]+sm[b]; mn[t]=min(mn[a],mn[b]); mx[t]=max(mx[a],mx[b]); } void build(int t,int l,int r) { if(l==r)sm[t]=mn[t]=mx[t]=s[l]; else{ int m=l+r>>1,a=t<<1,b=a|1; build(b,m+1,r); build(a,l,m); update(t); } } void add(int t,int l,int r,int x,int y,int v) { if(l==x&&y==r)sm[t]+=1LL*v*(r-l+1),mx[t]+=v,mn[t]+=v,tg[t]+=v; else{ int m=l+r>>1,a=t<<1,b=a|1; if(tg[t])add(a,l,m,l,m,tg[t]),add(b,m+1,r,m+1,r,tg[t]),tg[t]=0; if(y<=m)add(a,l,m,x,y,v); else if(x>m)add(b,m+1,r,x,y,v); else add(a,l,m,x,m,v),add(b,m+1,r,m+1,y,v); update(t); } } int dis(int a,int b) { return (a>=0?a/b:(a-b+1)/b)-a; } void div(int t,int l,int r,int x,int y,int v) { if(l==x&&y==r&&dis(mx[t],v)==dis(mn[t],v))add(t,l,r,x,y,dis(mx[t],v)); else{ int m=l+r>>1,a=t<<1,b=a|1; if(tg[t])add(a,l,m,l,m,tg[t]),add(b,m+1,r,m+1,r,tg[t]),tg[t]=0; if(y<=m)div(a,l,m,x,y,v); else if(x>m)div(b,m+1,r,x,y,v); else div(a,l,m,x,m,v),div(b,m+1,r,m+1,y,v); update(t); } } lnt sum(int t,int l,int r,int x,int y) { if(l==x&&y==r)return sm[t]; int m=l+r>>1,a=t<<1,b=a|1; if(tg[t])add(a,l,m,l,m,tg[t]),add(b,m+1,r,m+1,r,tg[t]),tg[t]=0; if(y<=m)return sum(a,l,m,x,y); if(x>m)return sum(b,m+1,r,x,y); return sum(a,l,m,x,m)+sum(b,m+1,r,m+1,y); } int min(int t,int l,int r,int x,int y) { if(l==x&&y==r)return mn[t]; int m=l+r>>1,a=t<<1,b=a|1; if(tg[t])add(a,l,m,l,m,tg[t]),add(b,m+1,r,m+1,r,tg[t]),tg[t]=0; if(y<=m)return min(a,l,m,x,y); if(x>m)return min(b,m+1,r,x,y); return min(min(a,l,m,x,m),min(b,m+1,r,m+1,y)); } int n,m; signed main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;++i)scanf("%d",s+i); build(1,1,n); for(int i=1,k,x,y,z;i<=m;++i){ scanf("%d%d%d",&k,&x,&y),++x,++y; if(k==4)printf("%lld\n",sum(1,1,n,x,y)); else if(k==3)printf("%d\n",min(1,1,n,x,y)); else if(scanf("%d",&z),k==1)add(1,1,n,x,y,z); else div(1,1,n,x,y,z); } }
- 1
信息
- ID
- 1008
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者