hdu 4027 Can you answer these queries?
2013-08-29 23:26
351 查看
hdu 4027 Can you answer these queries?
线段树
线段树
#include <stdio.h> #include <string.h> #include <math.h> #define MAX 400000 struct node { int left, right; __int64 val; int flag; }; node tree[MAX]; void buildTree(int l, int r, int n) { tree .left = l; tree .right = r; tree .flag = 0; if (l == r) { scanf("%I64d", &tree .val); if (tree .val <= 1) { tree .flag = 1; } return ; } int mid = (l + r)>>1; buildTree(l, mid, n<<1); buildTree(mid + 1, r, n<<1|1); tree .val = tree[n<<1].val + tree[n<<1|1].val; if (tree[n<<1].flag && tree[n<<1|1].flag) { tree .flag = 1; } } void update(int l, int r, int n) { if (tree .flag) { return ; } if (tree .left == tree .right) { tree .val = (__int64)sqrt(1.0*tree .val); if (tree .val <= 1) { tree .flag = 1; } return ; } int mid = (tree .left + tree .right)>>1; if (r <= mid) { update(l, r, n<<1); } else if (l > mid) { update(l, r, n<<1|1); } else { update(l, mid, n<<1); update(mid + 1, r, n<<1|1); } tree .val = tree[n<<1].val + tree[n<<1|1].val; if (tree[n<<1].flag && tree[n<<1|1].flag) { tree .flag = 1; } } __int64 query(int l, int r, int n) { __int64 ans = 0; if (tree .left == l && tree .right == r) { return tree .val; } int mid = (tree .left + tree .right)>>1; if (r <= mid) { ans += query(l, r, n<<1); } else if (l > mid) { ans += query(l, r, n<<1|1); } else { ans += query(l, mid, n<<1); ans += query(mid + 1, r, n<<1|1); } return ans; } int main() { int n, m, t = 0; int a, b, c; int min, max; int i; while (scanf("%d", &n) == 1) { memset(tree, 0, sizeof(tree)); printf("Case #%d:\n", ++t); buildTree(1, n, 1); scanf("%d", &m); for (i = 0; i < m; i++) { scanf("%d%d%d", &a, &b, &c); min = b > c ? c : b; max = b > c ? b : c; if (!a) { update(min, max, 1); } else { printf("%I64d\n", query(min, max, 1)); } } printf("\n"); } return 0; }
相关文章推荐
- hdu 4027 Can you answer these queries? The 36th ACM/ICPC Asia Regional Shanghai Site
- 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?(线段树)