hdu 1166 敌兵布阵 单点更新模板
2015-02-03 20:24
309 查看
#include <iostream> #include <queue> #include <string.h> #include <stdio.h> using namespace std; #define lson l, mid, rt << 1 #define rson mid+1, r, rt << 1 | 1 const int N = 50005; struct node{ int l, r; int x; }tr[N*4]; int n; void build( int l, int r, int rt ) { if( l == r ) { tr[rt].l = l; tr[rt].r = r; scanf("%d", &tr[rt].x); return; } tr[rt].l = l; tr[rt].r = r; int mid = ( l + r) >> 1; build( lson ); build( rson ); tr[rt].x = tr[rt<<1].x + tr[rt<<1|1].x; } int query( int l, int r, int rt ) { if( tr[rt].l == l && tr[rt].r == r ) return tr[rt].x; int mid = ( tr[rt].l + tr[rt].r ) >> 1; if( r <= mid ) return query( l, r, rt << 1 ); else if( l > mid ) return query( l, r, rt << 1 | 1 ); else return ( query( l, mid, rt << 1 ) + query( mid+1, r, rt << 1 | 1) ); } void update( int a, int b, int rt ) { if( tr[rt].l == tr[rt].r && tr[rt].l == a ) { tr[rt].x += b; return; } else { int mid = ( tr[rt].l + tr[rt].r ) >> 1; if( a <= mid ) update( a, b, rt << 1); else update( a, b, rt << 1 | 1); tr[rt].x = tr[rt<<1].x + tr[rt<<1|1].x; } } int main() { int cas = 1, tot; scanf("%d", &tot); while( tot-- ) { scanf("%d", &n); build( 1, n, 1 ); printf("Case %d:\n", cas++ ); char op[10]; int a, b; while( scanf("%s", op), strcmp( op, "End" )) { scanf("%d%d", &a, &b); if( !strcmp( op, "Add" ) ) update( a, b, 1 ); else if( !strcmp( op, "Sub" ) ) update( a, -b, 1 ); else { int ans = query(a, b, 1); printf("%d\n", ans); } } } return 0; }
相关文章推荐
- kuangbin专题七:A题 HDU 1166 敌兵布阵(单点更新,区域查询求和的线段树模板)
- hdu 1166 敌兵布阵 (线段树、树状数组模板,单点更新)
- HDU - 1166 A - 敌兵布阵 线段树单点更新模板
- HDU 1166-敌兵布阵【树状数组&&线段树单点更新】【模板】
- HDU 1166 敌兵布阵 [线段树-单点更新]
- 线段树入门 单点更新 hdu 1751 I Hate It hdu 1166 敌兵布阵
- hdu 1166 敌兵布阵(线段树-单点更新)
- hdu 1166 敌兵布阵 线段树 单点更新
- Hdu-1166 敌兵布阵【线段树(单点更新)】
- 线段树 hdu 1166 敌兵布阵 单点更新区间求和
- hdu 1166 敌兵布阵(线段树-单点更新)
- 线段树入门[单点更新] 敌兵布阵 HDU 1166
- hdu 1166 敌兵布阵 单点更新 树状数组 线段树 两种做法
- hdu 1166 敌兵布阵 (线段树 单点更新 区间求和)
- hdu1166敌兵布阵(线段树---单点更新,区间求值)
- [ACM] hdu 1166 敌兵布阵 (线段树,单点更新)
- 树状数组:HDU1166敌兵布阵 【单点更新,区间查询】
- hdu-1166-敌兵布阵-线段树-单点更新,区域查询
- hdu 1166 敌兵布阵 线段树(单点更新)
- hdu 1166 敌兵布阵(线段树之 单点更新+区间求和)