您的位置:首页 > 其它

HDU 1166 敌兵布阵

2012-02-14 19:05 302 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1166

开始学线段树,代码基本上是抄的

View Code

//hdu 1166
#include <stdio.h>
const int N=50010;
int st[4*N],n;
void build(int l,int r,int rt)
{
if (l==r)
{
scanf("%d",&st[rt]);
return;
}
int m=(l+r)/2;
build(l,m,rt*2);
build(m+1,r,rt*2+1);
st[rt]=st[rt*2]+st[rt*2+1];
}
void add(int p,int a,int l,int r,int rt)
{
if (l==r)
{
st[rt]+=a;
return;
}
int m=(l+r)/2;
if (p<=m) add(p,a,l,m,rt*2);
else add(p,a,m+1,r,rt*2+1);
st[rt]=st[rt*2]+st[rt*2+1];
}
int sum(int ll,int rr,int l,int r,int rt)
{
if (ll<=l && r<=rr) return st[rt];
int m,s=0;
m=(l+r)/2;
if (ll<=m) s+=sum(ll,rr,l,m,rt*2);
if (rr>m) s+=sum(ll,rr,m+1,r,rt*2+1);
return s;
}
int main()
{
int T,C=0;
scanf("%d",&T);
while (T--)
{
printf("Case %d:\n",++C);
scanf("%d",&n);
build(1,n,1);
char op[6];
int a,b;
while (scanf("%s",op),op[0]!='E')
{
scanf("%d%d",&a,&b);
switch (op[0])
{
case 'A': add(a,b,1,n,1); break;
case 'S': add(a,-b,1,n,1); break;
case 'Q': printf("%d\n",sum(a,b,1,n,1)); break;
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: