[kuangbin带你飞]专题七 线段树 A - 敌兵布阵 (单点修改,区间求和)
2017-09-28 18:15
615 查看
https://vjudge.net/problem/UESTC-1057
线段树 基础题 (单点修改,区间求和)
线段树 基础题 (单点修改,区间求和)
#include<stdio.h> #include<algorithm> #include<string.h> #include<iostream> #define lid (id << 1) #define rid (id << 1 | 1) using namespace std; const int MAXN=50005; int a[MAXN]; struct Node { int l,r; int sum,Max; void updata(int x) { sum+=x; //增加 // sum=x; //修改 Max=sum; } }tr[MAXN*4]; void push_up(int id) { tr[id].sum = tr[lid].sum + tr[rid].sum; tr[id].Max = max(tr[lid].Max,tr[rid].Max); } void build(int id,int l,int r) { tr[id].l=l;tr[id].r=r; if(l==r) tr[id].sum=tr[id].Max=a[l]; else { int mid=(l+r)>>1; build(lid,l,mid); build(rid|1,mid+1,r); push_up(id); } } void updata(int id,int x,int v) { if(tr[id].l==x&&tr[id].r==x) tr[id].updata(v); else{ int mid=(tr[id].l+tr[id].r)>>1; if(x<=mid) updata(lid,x,v); else updata(rid,x,v); push_up(id); } } int query_sum(int id,int l,int r) { if(l==tr[id].l&&r==tr[id].r) return tr[id].sum; int mid=(tr[id].l+tr[id].r)>>1; if(r<=mid) return query_sum(lid,l,r); else if(l>mid) return query_sum(rid,l,r); else return query_sum(lid,l,mid)+query_sum(rid,mid+1,r); } /*int query_max(int id,int l,int r) { if(l==tr[id].l&&r==tr[id].r) return tr[id].Max; int mid=(tr[id].l+tr[id].r)>>1; if(r<=mid) return query_max(lid,l,r); else if(l>mid) return query_max(rid,l,r); else return max(query_max(lid,l,mid),query_max(rid,mid+1,r)); } */ char str[10]; int main() { int T,iCase=1,n; scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); build(1,1,n); printf("Case %d:\n",iCase++); while(scanf("%s",&str)) { if(strcmp(str,"End")==0) break; int x,y; scanf("%d%d",&x,&y); if(strcmp(str,"Add")==0) updata(1,x,y); else if(strcmp(str,"Sub")==0) updata(1,x,-y); else printf("%d\n",query_sum(1,x,y)); } } return 0; }
相关文章推荐
- 【算法系列学习】线段树vs树状数组 单点修改,区间查询 [kuangbin带你飞]专题七 线段树 A - 敌兵布阵
- 线段树系列-hdu-1166-敌兵布阵-单点修改区间求和
- HDU 1166 敌兵布阵(树状数组 or 线段树 单点修改 区间求和)
- [kuangbin带你飞]专题七 线段树 B - I Hate It(单点修改,区间最大值)
- 【算法系列学习】线段树 区间修改,区间求和 [kuangbin带你飞]专题七 线段树 C - A Simple Problem with Integers
- 敌兵布阵 HDU - 1166 (线段树单点修改区间求和模板)
- kuangbin专题七:A题 HDU 1166 敌兵布阵(单点更新,区域查询求和的线段树模板)
- HDU 1166 敌兵布阵 【线段树(单点增减 区间求和)】
- 线段树·HDU1166 敌兵布阵·单点更新区间求和
- hdu 1166 敌兵布阵(线段树-单点更新,区间求和)
- HDU 1166 敌兵布阵(线段树/单点增减、区间求和)
- HDU 1166 敌兵布阵 (线段树 单点增减 区间求和 模板)
- hdu1166 敌兵布阵 线段树单点更新+区间求和
- 【算法系列学习】线段树 单点覆盖,区间查询最大值 [kuangbin带你飞]专题七 线段树 B - I Hate It
- hdoj 1166 敌兵布阵 【单点更新+区间求和】 【线段树】 【树状数组】
- Hdu 1166 敌兵布阵 树状数组 或 线段树 单点更新,区间求和
- HDU 1166 敌兵布阵(线段树/单点增减、区间求和)
- hdu 1166 敌兵布阵【线段树,单点增减,区间求和】
- hdu 1116 敌兵布阵 线段树 区间求和 单点更新
- hdu 1166 敌兵布阵(线段树之 单点更新+区间求和)