HDU 4027 Can you answer these queries(线段树)
2015-03-25 23:27
429 查看
#include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <cmath> #include <vector> #include <queue> #include <set> #include <algorithm> #include <stack> using namespace std; const int MAXN = 100000 + 10; struct Tree { int l, r; long long sum; }tree[MAXN<<2]; void build(int l, int r, int rt) { tree[rt].l = l; tree[rt].r = r; if(l == r) { scanf("%I64d\n", &tree[rt].sum); return ; } int m = (l + r) >> 1; build(l, m, rt<<1); build(m + 1, r, rt<<1|1); tree[rt].sum = tree[rt<<1].sum + tree[rt<<1|1].sum; } void update(int l, int r, int rt) { if(tree[rt].l == l && tree[rt].r == r && tree[rt].sum == r - l + 1) return ; if(tree[rt].l == tree[rt].r) { tree[rt].sum = sqrt(tree[rt].sum * 1.0); return ; } int m = (tree[rt].l + tree[rt].r) >> 1; if(r <= m) update(l, r, rt<<1); else if(l > m) update(l, r, rt<<1|1); else { update(l, m, rt<<1); update(m + 1, r, rt<<1|1); } tree[rt].sum = tree[rt<<1].sum + tree[rt<<1|1].sum; } long long Query(int l, int r, int rt) { if(tree[rt].l == l && tree[rt].r == r) return tree[rt].sum; int m = (tree[rt].l + tree[rt].r) >> 1; long long ans = 0; if(r <= m) ans = Query(l, r, rt<<1); else if(l > m) ans = Query(l, r, rt<<1|1); else { ans += Query(l, m, rt<<1); ans += Query(m + 1, r, rt<<1|1); } return ans; } int main() { int kcase = 1; int n, m; while(scanf("%d", &n)!=EOF) { build(1, n, 1); scanf("%d", &m); int op, x, y; printf("Case #%d:\n", kcase++); for(int i=1;i<=m;i++) { scanf("%d%d%d", &op, &x, &y); if(x > y) swap(x, y); if(op == 0) update(x, y, 1); else printf("%I64d\n", Query(x, y, 1)); } printf("\n"); } return 0; }
相关文章推荐
- HDU 4027 Can you answer these queries?(线段树,区间更新,区间查询)
- HDU 4027 Can you answer these queries?(线段树的单点更新+区间查询)
- HDU 4027 Can you answer these queries?(线段树)
- hdu 4027 Can you answer these queries? 线段树
- HDU 4027 Can you answer these queries? 线段树 区间修改 区间查询
- 【HDU】4027 Can you answer these queries? (线段树)
- hdu 4027 Can you answer these queries? 线段树特殊更新节点
- HDU 4027 Can you answer these queries?(线段树)
- HDU 4027 Can you answer these queries(线段树 成段更新)
- hdu-4027-Can you answer these queries?-线段树
- HDU 4027 Can you answer these queries? (线段树)
- HDU 4027 Can you answer these queries ? ( 线段树 )
- HDU 4027 Can you answer these queries? (线段树+区间点修改)
- HDU 4027 Can you answer these queries (线段树求和)
- hdu 4027 Can you answer these queries? 线段树
- HDU 4027 Can you answer these queries? 线段树
- hdu 4027 Can you answer these queries? 线段树
- HDU 4027—— Can you answer these queries?——————【线段树区间开方,区间求和】
- HDU 4027 —— Can you answer these queries?(线段树)
- Hdu 4027 Can you answer these queries?(线段树)