hdu 1166 敌兵布阵(线段树)
来源:互联网 发布:linux所有网卡的网关 编辑:程序博客网 时间:2024/05/16 08:06
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166
思路:
线段树入门提,维护单点更新。
建树感觉都都差不多,主要在更新和询问两个步骤上变化挺大了,感觉还没有领悟,唉。
至于模板,没事的时候手搓几遍,慢慢就熟练了。
#include <limits.h>#include <math.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#include <algorithm>#include <iostream>#include <iterator>#include <queue>#include <stack>#include <string>#include <vector>#include <set>//#define ONLINE_JUDGE#define eps 1e-8#define INF 0x7fffffff //INT_MAX#define inf 0x3f3f3f3f //int??????????????????#define FOR(i,a) for((i)=0;i<(a);(i)++) //[i,a);#define MEM(a) (memset((a),0,sizeof(a)))#define sfs(a) scanf("%s",a)#define sf(a) scanf("%d",&a)#define sfI(a) scanf("%I64d",&a)#define pf(a) printf("%d\n",a)#define pfI(a) printf("%I64d\n",a)#define pfs(a) printf("%s\n",a)#define sfd(a,b) scanf("%d%d",&a,&b)#define sft(a,b,c)scanf("%d%d%d",&a,&b,&c)#define for1(i,a,b) for(int i=(a);i<b;i++)#define for2(i,a,b) for(int i=(a);i<=b;i++)#define for3(i,a,b)for(int i=(b);i>=a;i--)#define MEM1(a) memset(a,0,sizeof(a))#define MEM2(a) memset(a,-1,sizeof(a))#define MEM3(a) memset(a,0x3f,sizeof(a))#define LL __int64const double PI = acos(-1.0);template<class T> T gcd(T a, T b) { return b ? gcd(b, a % b) : a; }template<class T> T lcm(T a, T b) { return a / gcd(a, b) * b; }template<class T> inline T Min(T a, T b) { return a < b ? a : b; }template<class T> inline T Max(T a, T b) { return a > b ? a : b; }using namespace std;template<class T>T Mint(T a, T b, T c) { if (a>b) { if (c>b) return b; return c; } if (c>a) return a; return c;}template<class T>T Maxt(T a, T b, T c) { if (a>b) { if (c>a) return c; return a; } else if (c > b) return c; return b;}const int maxn=50005;int T,n,m,k;char s[10];struct node{ int l,r; int v;}node[3*maxn+10];void build(int left,int right,int id){ node[id].l=left; node[id].r=right; node[id].v=0; if(left==right) return; int mid=(left+right)>>1; build(left,mid,id<<1); build(mid+1,right,id<<1|1);}void Update(int id,int pos,int add){ int l=node[id].l,r=node[id].r; if(l==r){ node[id].v+=add; return ; } int mid=(l+r)>>1; if(pos<=mid){ Update(id<<1,pos,add); } else{ Update(id<<1|1,pos,add); } node[id].v=node[id<<1].v+node[id<<1|1].v;}int Query(int left,int right,int id){ int l=node[id].l,r=node[id].r; if(l==left&&r==right){ return node[id].v; } int mid=(l+r)>>1; if(mid<left){ return Query(left,right,id<<1|1); } else if(mid>=right){ return Query(left,right,id<<1); } else{ int r1=Query(left,mid,id<<1); int r2=Query(mid+1,right,id<<1|1); return r1+r2; }}int main() {#ifndef ONLINE_JUDGE freopen("test.in","r",stdin); freopen("test.out","w",stdout);#endif int k=1; sf(T); while(T--){ printf("Case %d:\n",k++); sf(n); build(1,n,1); for2(i,1,n){ sf(m); Update(1,i,m); } int p,q; while(sfs(s)){ if(s[0]=='E') break; sfd(p,q); if(s[0]=='Q') pf(Query(p,q,1)); else if(s[0]=='A') Update(1,p,q); else if(s[0]=='S') Update(1,p,-q); } } return 0;}
0 0
- HDU-1166-敌兵布阵(线段树)
- HDU 1166敌兵布阵(线段树)
- HDU 1166 敌兵布阵 (线段树)
- hdu 1166 敌兵布阵(线段树)
- hdu 1166 敌兵布阵(线段树)
- HDU 1166 敌兵布阵(线段树)
- hdu 1166 敌兵布阵(线段树)
- HDU 1166 敌兵布阵(线段树)
- HDU 1166 敌兵布阵(线段树)
- hdu 1166 敌兵布阵(线段树)
- hdu 1166 敌兵布阵 (线段树)
- HDU - 1166 敌兵布阵(线段树)
- HDU 1166 敌兵布阵(线段树)
- HDU 1166 敌兵布阵(线段树)
- hdu 1166 敌兵布阵(线段树)
- HDU 1166敌兵布阵(线段树)
- HDU 1166 敌兵布阵(线段树)
- HDU 1166 敌兵布阵(线段树)
- 斯普瑞斯奥特莱斯斯普瑞斯奥特莱斯董事长栾少梅欠债不还
- 根activity的启动过程--控制转移
- AngularJS中service,factory,provider的区别
- Java enum的用法详解
- 用get方法传输数据到服务器
- hdu 1166 敌兵布阵(线段树)
- java.net.UnknownHostException
- 关于git的常用方法,多账号以及一些规范(更新)
- java enum(枚举)使用详解 + 总结
- java枚举使用详解
- 单文档下Formview多窗口切换
- Java基础--进制、运算符、语句
- 构建java高效的缓存
- mac环境变量配置文件加载优先级