线段树之HDU1166 敌兵布阵
来源:互联网 发布:建筑平面设计软件 编辑:程序博客网 时间:2024/03/29 08:59
最基础的改点求段,可以用来练模板。
#include <stdio.h>#include <ctype.h>#include <string.h>#include <stdlib.h>#include <limits.h>#include <math.h>#include <algorithm>using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1const int MAXN=50010;int sum[MAXN<<2];int a[MAXN];inline void PushUp(int rt)<span style="white-space:pre"></span>//修改父节点{ sum[rt]=sum[rt<<1]+sum[rt<<1|1];}void build(int l,int r,int rt)//建树{ if(l==r) { sum[rt]=a[l]; return; } int m=(l+r)>>1; build(lson); build(rson); PushUp(rt);}//单点更新,根据要更新的点的下标 来递归void update(int id,int add,int l,int r,int rt){ if(l==r) { sum[rt]+=add; return; } int m=(l+r)>>1; if(id<=m) update(id,add,lson); else update(id,add,rson); PushUp(rt);}int query(int L,int R,int l,int r,int rt){ if( L<=l && r<=R ) return sum[rt]; int m=(l+r)>>1; if(R<=m)return query(L,R,lson);else if(L>m)return query(L,R,rson);elsereturn query(L,R,lson)+query(L,R,rson);}int main(){ int T;int cas;int n,i,j;char s[50];int x,y;while(scanf("%d",&T)!=EOF){for(cas=1;cas<=T;cas++){scanf("%d",&n);for(i=1;i<=n;i++)scanf("%d",&a[i]);build(1,n,1);printf("Case %d:\n",cas);while(1){scanf("%s",s);if(strcmp(s,"End")==0)break;scanf("%d%d",&x,&y);if(strcmp(s,"Add")==0)update(x,y,1,n,1);if(strcmp(s,"Sub")==0)update(x,-y,1,n,1);if(strcmp(s,"Query")==0)printf("%d\n",query(x,y,1,n,1));}}}return 0;}
0 0
- 线段树之HDU1166 敌兵布阵
- 线段树 hdu1166 (敌兵布阵)
- 【线段树】 hdu1166 敌兵布阵
- hdu1166 敌兵布阵 线段树
- hdu1166敌兵布阵 (线段树)
- hdu1166 敌兵布阵,线段树
- HDU1166 敌兵布阵(线段树)
- hdu1166 敌兵布阵 线段树
- hdu1166- 敌兵布阵线段树
- 【线段树】hdu1166敌兵布阵
- hdu1166 敌兵布阵(线段树)
- 线段树 HDU1166 敌兵布阵
- hdu1166-敌兵布阵(线段树)
- hdu1166 敌兵布阵 线段树
- hdu1166-敌兵布阵 线段树
- hdu1166敌兵布阵 线段树
- HDU1166 敌兵布阵(线段树)
- hdu1166 敌兵布阵 线段树
- P2P 穿透内网,连接动态ip,内网ip打洞,p2p实现原理
- PIGS
- LINQ体验(16)——LINQ to SQL语句之DataContext
- Web.xml配置详解
- 51nod 1413:权势二进制
- 线段树之HDU1166 敌兵布阵
- 最小生成树 Prime算法
- js 浮动窗效果
- 喷水装置(一) nyoj 6 && 喷水装置(二)NYOJ_12
- nginx安装
- 移动鼠标显示坐标及退出
- SQL Server 2008数据库创建用户只读权限的两种方式
- 7大未来Web设计趋势
- swift - The Builder Pattern