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; }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2489874.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!