码迷,mamicode.com
首页 > 其他好文 > 详细

HDOJ1166(线段树)

时间:2015-11-05 18:40:11      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:

该代码TLE,实在不清why

#include<cstdio>
#define lson n<<1,l,mid
#define rson n<<1|1,mid+1,r
#define Push a[n].sum=a[n<<1].sum+a[n<<1|1].sum;
using namespace std;
const int MAX_N=50005;
struct node{
    int l,r,sum;
};
node a[MAX_N<<2];
void Build(int n,int l,int r)
{
    a[n].l=l;
    a[n].r=r;
    if(l==r)
    {
        scanf("%d",&a[n].sum);
        return ;
    }
    int mid=(l+r)>>1;
    Build(lson);
    Build(rson);
    Push;
}
void Update(int n,int pos,int val)
{
    if(a[n].l==pos&&a[n].r==pos)
    {
        a[n].sum+=val;
        return ;
    }
    int mid=(a[n].l+a[n].r)>>1;
    if(pos<=mid)
        Update(n<<1,pos,val);
    else
        Update(n<<1|1,pos,val);
    Push;
}
int Qsum(int n,int l,int r)
{
    if(a[n].l==a[n].r)
    {
        return a[n].sum;
    }
    int mid=(a[n].l+a[n].r)>>1;
    if(r<=mid)
        return Qsum(n<<1,l,r);
    else if(mid<l)
        return Qsum(n<<1|1,l,r);
    else return Qsum(lson)+Qsum(rson);
}

int main()
{
    int T;
    scanf("%d",&T);
    for(int cas=1;cas<=T;cas++)
    {
        printf("Case %d:\n",cas);
        int n;
        scanf("%d",&n);
        Build(1,1,n);
        char s[20];
        while(true)
        {
            scanf("%s",s);
            if(s[0]==E)    break;
            int x,y;
            scanf("%d %d",&x,&y);
            if(s[0]==A) Update(1,x,y); 
            else if(s[0]==S) Update(1,x,-y);
            else   printf("%d\n",Qsum(1,x,y));
        }
    }
    return 0;
}

 

HDOJ1166(线段树)

标签:

原文地址:http://www.cnblogs.com/program-ccc/p/4940199.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!