2026.4.5

张开发
2026/4/10 16:37:30 15 分钟阅读

分享文章

2026.4.5
线段树lazy标记#includebits/stdc.h using namespace std; #define int long long #define N 100004 int num[N],tree[4*N],n,q,ans; int len[4*N],lazy[4*N]; char op; int a1,a2,a3; void updata(int xx) { tree[xx]tree[xx*2]tree[xx*21]; len[xx]len[xx*2]len[xx*21]; } void build(int xx,int l,int r) { if(lr) { tree[xx]num[l]; len[xx]1; return ; } int mid(lr)/2; build(xx*2,l,mid); build(xx*21,mid1,r); updata(xx); return ; } void setlazy(int xx,int p) { tree[xx]p*len[xx]; lazy[xx]p; return ; } void pushdown(int xx) { setlazy(xx*2,lazy[xx]); setlazy(xx*21,lazy[xx]); lazy[xx]0; } void add(int xx,int l,int r,int x,int y,int p) { if(lxry) { setlazy(xx,p); return ; } int mid(lr)/2; pushdown(xx); if(midx) add(xx*2,l,mid,x,y,p); if(mid1y) add(xx*21,mid1,r,x,y,p); updata(xx); return ; } void find(int xx,int l,int r,int x,int y) { if(lxry) { anstree[xx]; return ; } int mid(lr)/2; pushdown(xx); if(midx) find(xx*2,l,mid,x,y); if(mid1y) find(xx*21,mid1,r,x,y); return ; } signed main() { memset(lazy,0,sizeof(lazy)); cinnq; for(int i1;in;i) cinnum[i]; build(1,1,n); for(int i1;iq;i) { cinop; if(opC) { cina1a2a3; add(1,1,n,a1,a2,a3); } if(opQ) { cina1a2; ans0; find(1,1,n,a1,a2); coutansendl; } } return 0; }

更多文章