POJ-3468-A Simple Problem with Integers
2016-04-28 19:11
369 查看
线段树区间更新,区间求和
#include <iostream> #include <cstdio> #define maxn 100005 #define INF 1e9 using namespace std; typedef long long ll; ll sum[maxn<<2], add[maxn<<2]; void Build(int n, int l, int r){ add = 0; if(l == r){ scanf("%lld ", sum+n); return ; } int mid = (l + r) >> 1; Build(n<<1, l, mid); Build(n<<1|1, mid+1, r); sum = sum[n<<1] + sum[n<<1|1]; } void Pushdown(int n, int m){ if(add ){ sum[n<<1] += (m - (m >> 1)) * add ; sum[n<<1|1] += (m >> 1) * add ; add[n<<1] += add ; add[n<<1|1] += add ; add = 0; } } void Update(int n, int L, int R, int l, int r, int d){ if(l == L && R == r){ add += d; sum += (r - l + 1) * d; return ; } Pushdown(n, R - L + 1); int mid = (L + R) >> 1; if(r <= mid) Update(n<<1, L, mid, l, r, d); else if(l > mid) Update(n<<1|1, mid+1, R, l, r, d); else{ Update(n<<1, L, mid, l, mid, d); Update(n<<1|1, mid+1, R, mid+1, r, d); } sum = sum[n<<1] + sum[n<<1|1]; } void Query(int n, int L, int R, int l, int r, ll &s){ if(L == l && R == r){ s += sum ; return ; } Pushdown(n, R - L + 1); int mid = (L + R) >> 1; if(r <= mid) Query(n<<1, L, mid, l, r, s); else if(l > mid) Query(n<<1|1, mid+1, R, l, r, s); else{ Query(n<<1, L, mid, l, mid, s); Query(n<<1|1, mid+1, R, mid+1, r, s); } } int main(){ // freopen("in.txt", "r", stdin); int n, q; while(scanf("%d%d ", &n, &q) == 2){ char ch; int a, b, c; Build(1, 1, n); for(int i = 0; i < q; i++){ scanf("%c", &ch); if(ch == 'Q'){ ll s = 0; scanf("%d%d ", &a, &b); Query(1, 1, n, a, b, s); printf("%lld\n", s); } else{ scanf("%d%d%d ", &a, &b, &c); Update(1, 1, n, a, b, c); } } } return 0; }
相关文章推荐
- 团队作业(五)-笔记app top5
- unity3D 彻底搞懂 Quaternion LookRotation FromToRotation SetLookRotation方法
- 0428 团队2.0
- 0428团队项目2.0
- hdu1300 Pearls 【dp】
- C#OOP 之九 文件输入输出流
- C#OOP 之九 文件输入输出流
- 大数据管理:数据集成的技术、方法与最佳实践 读书笔记三
- C#OOP 之九 文件输入输出流
- solr入门之多线程默认查询solr库的返回结果不一致问题
- 【饥荒mod制作吧第四篇】mod制作教程系列
- centos7 安装 nginx
- LVM快照备份与恢复
- java中时间的比较
- Linux下使用ioctl获取本地接口IP
- 打开Navicat for MYSQL报如下的错误解决方法
- Mysql get current time
- maven 学习---如何从Maven远程存储库下载?
- arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别
- 语言缩写