CDOJ 1057 秋实大哥与花 裸线段树
2016-03-09 23:05
267 查看
先复习一遍线段树。。。。
代码:
代码:
#include <iostream> #include <cstdio> #define maxn 100015 #define lid (id<<1) #define rid ((id<<1)|1) #define LL long long long long a[maxn]; struct segtree { int l, r; long long sum, lazy; }tr[maxn*4]; void push_down(int id) { if (tr[id].lazy != 0) { tr[lid].sum += (tr[lid].r - tr[lid].l + 1)*tr[id].lazy; tr[lid].lazy += tr[id].lazy; tr[rid].sum += (tr[rid].r - tr[rid].l + 1)*tr[id].lazy; tr[rid].lazy += tr[id].lazy; tr[id].lazy = 0; } } void bulid(int id, int l, int r) { tr[id].l = l; tr[id].r = r; if (l == r) { tr[id].sum = a[l-1]; return; } int mid = (l + r) >> 1; bulid(lid, l, mid); bulid(rid, mid + 1, r); tr[id].sum = tr[lid].sum + tr[rid].sum; } void update(int id, int l, int r,long long v) { if (l == tr[id].l&&tr[id].r == r) { tr[id].sum += (tr[id].r - tr[id].l + 1)*v; tr[id].lazy += v; return; } push_down(id); int mid = (tr[id].l + tr[id].r) >> 1; if (r <= mid) update(lid, l, r, v); else if (l > mid) update(rid, l, r, v); else { update(lid, l, mid, v); update(rid, mid + 1, r, v); } tr[id].sum = tr[lid].sum + tr[rid].sum; } long long query(int id, int l, int r) { if (l == tr[id].l&&r == tr[id].r) return tr[id].sum; push_down(id); int mid = (tr[id].l + tr[id].r) >> 1; if (r <= mid) return query(lid, l, r); else if (l > mid) return query(rid, l, r); else return query(lid, l, mid) + query(rid, mid + 1, r); } int main() { int n, m, l, r; long long v; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%lld", &a[i]); bulid(1, 1, n); scanf("%d", &m); while (m--) { scanf("%d %d %lld", &l, &r, &v); update(1, l, r, v); printf("%lld", query(1, l, r)); if (m!=0) printf("\n"); } return 0; }
相关文章推荐
- .NET4.5中WCF中默认生成的basicHttpsBinding的研究
- POJ2635The Embarrassed Cryptographer(大数取余+素数筛选+好题)
- linux 各压缩工具
- Ajax基本使用
- 在打印窗口,打印视图View的子视图结构图
- Java HashMap 核心源码解读
- 编程小练习2
- IntelliJ IDEA首次使用问题解决2
- 内存溢出与内存泄漏
- spring中JdbcTemplate的使用
- 003.&与&&的区别?
- spring中JdbcTemplate的使用
- 《我是一只IT小小鸟》读后感
- 1.ioc容器(spring3.2文档第五章)
- Linux LTS 内核最新稳定版 4.4.4 版本发布
- mysql设置连接等待时间(wait_timeout)
- 通读《构建之法》后有感
- popupWindow布局
- 【数据结构与算法】(一) c 语言实现数组的简单操作
- 数据结构资料