博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【codevs1081】线段树练习2
阅读量:4660 次
发布时间:2019-06-09

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

problem

solution

codes

#include
using namespace std;const int maxn = 100010;#define lch p<<1#define rch p<<1|1struct node{ int val, addmark;}sgt[maxn<<2];void pushdown(int p, int l, int r){ if(!sgt[p].addmark)return; int t = sgt[p].addmark, m=l+r>>1; sgt[lch].addmark += t; sgt[rch].addmark += t; sgt[lch].val += t*(m-l+1); sgt[rch].val += t*(r-m); sgt[p].addmark = 0;}void update(int p, int l, int r, int ql, int qr, int v){ if(l>qr || r
>1; if(ql<=m)update(lch,l,m,ql,qr,v); if(qr>m)update(rch,m+1,r,ql,qr,v); sgt[p].val = sgt[lch].val+sgt[rch].val;}int query(int p, int l, int r, int ql, int qr){ if(ql<=l && r<=qr)return sgt[p].val; pushdown(p,l,r); int m = l+r>>1, ans = 0; if(ql<=m)ans += query(lch,l,m,ql,qr); if(qr>m)ans += query(rch,m+1,r,ql,qr); return ans;}int main(){ int n, m; cin>>n; for(int i = 1; i <= n; i++){ int x; cin>>x; update(1,1,n,i,i,x); } cin>>m; for(int i = 1; i <= m; i++){ int op, x, y, k; cin>>op; if(op == 1){ cin>>x>>y>>k; update(1,1,n,x,y,k); }else{ cin>>x; cout<
<<"\n"; } } return 0;}

转载于:https://www.cnblogs.com/gwj1314/p/9444730.html

你可能感兴趣的文章
210. Course Schedule II
查看>>
月薪3000与月薪30000的文案区别
查看>>
使用spring dynamic modules的理由
查看>>
Leetcode 117 Populating Next Right Pointers in Each Node 2
查看>>
C++ Primer 第四版中文版
查看>>
变量关系
查看>>
NTP工作机制及时间同步的方法
查看>>
近段时间学习html和CSS的一些细碎总结
查看>>
第三章 栈和队列
查看>>
「Vue」v-html生成的图片大小无法调整的解决办法
查看>>
【BZOJ 4665】 4665: 小w的喜糖 (DP+容斥)
查看>>
Git 的 .gitignore 配置
查看>>
Language Integrated Query ----序
查看>>
【HDU】1542 Atlantis
查看>>
解决Android SDK Manager更新时出现问题
查看>>
Android Studio下“Error:Could not find com.android.tools.build:gradle:2.2.1”的解决方法
查看>>
第二章 第四节 添加SWT库
查看>>
docker file
查看>>
总结一些常见的国际标准化组织
查看>>
使用mybatis进行多条件的模糊查询的方式
查看>>