hdu 1166 敌兵布阵 线段树单点更新
来源:互联网 发布:java sftp 编辑:程序博客网 时间:2024/06/05 08:46
全部采用扩展区间
//328MS1292K#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>#define lch(x) ((x)<<1)#define rch(x) ((x)<<1 | 1)using namespace std;const int MAX_N = 50000;int tree[MAX_N<<2];int a[MAX_N + 5];int N, NN;void init_NN(){ NN = 1; while(NN < N) NN <<= 1;}inline void push_up(int n){ tree[n] = tree[lch(n)] + tree[rch(n)];}void build(int n, int l, int r){ if(l == r){ tree[n] = a[l]; return; } int mid = (l+r)>>1; build(lch(n), l, mid); build(rch(n), mid+1, r); push_up(n);}void modify(int pos, int v){ int now = NN - 1 + pos; while(now >= 1){ tree[now] += v; now >>= 1; }}/*void modify(int pos, int v, int n, int l, int r){ tree[n] += v; if(l == r){ return; } int mid = (l+r)>>1; if(pos <= mid){ modify(pos, v, lch(n), l, mid); } else if(mid+1 <= pos){ modify(pos, v, rch(n), mid+1, r); }}*/int query(int a, int b, int n, int l, int r){ if(a <= l && r <= b){ return tree[n]; } int res = 0; int mid = (l+r)>>1; if(mid+1 <= a) res += query(a, b, rch(n), mid+1, r); else if(b <= mid) res += query(a, b, lch(n), l, mid); else res += query(a, b, rch(n), mid+1, r) + query(a, b, lch(n), l, mid); return res;}int main(){ int T; scanf("%d", &T); for(int kase=1; kase<=T; kase++){ memset(tree, 0, sizeof(tree)); memset(a, 0, sizeof(a)); scanf("%d", &N); for(int i=1; i<=N; i++) scanf("%d", &a[i]); init_NN(); build(1, 1, NN); char str[10]; printf("Case %d:\n", kase); while(true){ scanf("%s", str); if(strcmp(str, "End") == 0) break; int a, b; scanf("%d%d", &a, &b); if(strcmp(str, "Add") == 0){ modify(a, b); } else if(strcmp(str, "Sub") == 0){ modify(a, -b); } else if(strcmp(str, "Query") == 0){ printf("%d\n", query(a, b, 1, 1, NN)); } } } return 0;}
0 0
- HDU 1166 敌兵布阵 [线段树-单点更新]
- Hdu-1166 敌兵布阵【线段树(单点更新)】
- 线段树 hdu 1166 敌兵布阵 单点更新区间求和
- 线段树入门[单点更新] 敌兵布阵 HDU 1166
- hdu 1166 敌兵布阵(线段树,单点更新)
- hdu 1166 敌兵布阵(线段树-单点更新)
- hdu 1166 敌兵布阵 线段树(单点更新)
- hdu 1166 敌兵布阵 线段树 单点更新
- [ACM] hdu 1166 敌兵布阵 (线段树,单点更新)
- hdu-1166-敌兵布阵-线段树-单点更新,区域查询
- HDU 1166 敌兵布阵 //线段树单点更新
- HDU 1166 敌兵布阵(线段树入门,单点更新)
- HDU 1166-敌兵布阵(线段树_单点更新)
- hdu 1166 敌兵布阵 线段树单点更新
- 敌兵布阵 - HDU 1166 单点更新线段树
- hdu 1166 敌兵布阵(单点更新线段树)
- hdu 1166 敌兵布阵(线段树入门-单点更新)
- HDU 1166 敌兵布阵【线段树-单点更新】
- 在ubuntu上搭建apache+php+mysql
- 【开源夏令营优秀开题报告】专题之四-桌面端合集
- C++的底层机制
- 黑马程序员-多线程
- 【LeetCode】Same Tree
- hdu 1166 敌兵布阵 线段树单点更新
- mininet+FlowVisor+OpenDayLight环境搭建及实验二(完)
- 堆
- python开发_sqlite3
- Django 第三方库
- 常用命令收集
- QSqlQuery问题总结
- 基于QT Plugin框架结构
- 正则表达式语法