博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P3372 【模板】线段树 1
阅读量:5006 次
发布时间:2019-06-12

本文共 1366 字,大约阅读时间需要 4 分钟。

#include
#include
using namespace std;const int maxx=100010;int n,m,a[maxx],add[maxx*4];long long sum[maxx*4];void build(int k,int l,int r){ if(l==r) { sum[k]=a[l]; return; } int mid=(l+r)>>1; build(k<<1,l,mid); build(k<<1|1,mid+1,r); sum[k]=sum[k<<1]+sum[k<<1|1];}void Add(int k,int l,int r,int v){ add[k]+=v; sum[k]+=(long long)v*(r-l+1);}void pushdown(int k,int l,int r,int mid){ if(add[k]==0) return; Add(k<<1,l,mid,add[k]); Add(k<<1|1,mid+1,r,add[k]); add[k]=0;}long long query(int k,int l,int r,int x,int y){ if(l>=x&&r<=y) return sum[k]; int mid=(l+r)>>1; long long res=0; pushdown(k,l,r,mid); if(x<=mid) res+=query(k<<1,l,mid,x,y); if(mid
=x&&r<=y) return Add(k,l,r,v); int mid=(l+r)>>1; pushdown(k,l,r,mid); if(x<=mid) modify(k<<1,l,mid,x,y,v); if(mid
>n>>m; for(i=1;i<=n;i++) cin>>a[i]; build(1,1,n); while(m--) { int qwq,start,end,f; cin>>qwq; if(qwq==1) { cin>>start>>end>>f; modify(1,1,n,start,end,f); } if(qwq==2) { cin>>start>>end; long long ans=query(1,1,n,start,end); printf("%lld\n",ans); } } return 0;}

背下来(

转载于:https://www.cnblogs.com/LSWorld/p/9683739.html

你可能感兴趣的文章
CAGradientLayer 透明渐变注意地方(原创)
查看>>
【OpenSource】--Web Bench 1.5
查看>>
python-1:工欲善其事,必先利其器 安装配置Anaconda x32位 更新后,启动不了,解决方案(亲测)...
查看>>
Linux 命令(二) Linux下查看文件文件内容命令
查看>>
ubuntu系统如何屏幕截图
查看>>
ArcGIS Engine 创建索引(属性索引)——提高查询效率
查看>>
栅格数据AE
查看>>
开发笔记
查看>>
织梦DEDE多选项筛选_联动筛选功能的实现_二次开发
查看>>
SQL Server 排名函数 简单应用
查看>>
Could not find file "/var/www/default/bin\roslyn\csc.exe".
查看>>
关于软件工程的疑问
查看>>
iOS关于RunLoop和Timer
查看>>
SQL处理层次型数据的策略对比:Adjacency list vs. nested sets: MySQL【转载】
查看>>
已存在同名的数据库,或指定的文件无法打开或位于 UNC 共享目录中。
查看>>
MySQL的随机数函数rand()的使用技巧
查看>>
thymeleaf+bootstrap,onclick传参实现模态框中遇到的错误
查看>>
python字符串实战
查看>>
wyh的物品(二分)
查看>>
UNIX网络编程
查看>>