• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            心如止水
            Je n'ai pas le temps
            posts - 400,comments - 130,trackbacks - 0
            被線段樹折磨了這么久,今天終于把它給寫出來了……用的是數(shù)組模擬樹。
            功能:創(chuàng)建一棵線段樹;給a[i]加上一個(gè)值;求一個(gè)區(qū)間的最大值。
            以下是我的代碼:
            /*
                Author >>  Lee1R
                Time >> 02,16,2010 23:37
            //
            */

            #include
            <stdio.h>
            const long maxn=10007;
            typedef 
            struct NODE
            {
                
            long a,b,sum;
                
            long left,right;
            }node;
            long n,m,a[maxn];
            node tree[maxn];
            long tot;
            void creat(long begin,long end)
            {
                
            long now,mid=(begin+end)/2;
                tot
            ++;now=tot;
                tree[now].a
            =begin;tree[now].b=end;
                
            if(end-begin<=1)
                {
                   tree[now].left
            =-1;
                   tree[now].right
            =-1;
                   tree[now].sum
            =a[begin]+a[end];
                }
                
            else
                {
                   tree[now].left
            =tot+1;creat(begin,mid);
                   tree[now].right
            =tot+1;creat(mid,end);
                   tree[now].sum
            =tree[tree[now].left].sum+tree[tree[now].right].sum-a[mid];
                }
            }
            void add(long pos,long det,long node)
            {
                
            long begin=tree[node].a,end=tree[node].b,mid=(begin+end)/2;
                tree[node].sum
            +=det;
                
            if(end-begin==1return;
                
            if(pos>=begin&&pos<=mid)
                  add(pos,det,tree[node].left);
                
            if(pos>=mid&&pos<=end)
                  add(pos,det,tree[node].right);
            }
            long getsum(long begin,long end,long node)
            {
                
            long re=0,t=(tree[node].a+tree[node].b)/2;
                
            if(tree[node].b-tree[node].a==1) re=tree[node].sum;
                
            else
                {
                   
            if(end<=t)
                     re
            =getsum(begin,end,tree[node].left);
                   
            else if(begin>=t)
                     re
            =getsum(begin,end,tree[node].right);
                   
            else
                     re
            =getsum(begin,t,tree[node].left)+getsum(t,end,tree[node].right)-a[t];
                }
                
            return re;
            }
            int main()
            {
                
            //*
                freopen("data.in","r",stdin);
                freopen(
            "data.out","w",stdout);
                
            //*/
                scanf("%ld",&n);
                
            for(long i=1;i<=n;i++) scanf("%ld",&a[i]);
                tot
            =0;creat(1,n);
                
            //  Init
                scanf("%ld",&m);
                
            for(long i=1;i<=m;i++)
                {
                   
            long t,b,c;
                   scanf(
            "%ld%ld%ld",&t,&b,&c);
                   
            switch(t)
                   {
                      
            case 1:
                           a[b]
            +=c;
                           add(b,c,
            1);
                           
            break;
                      
            case 2:
                           
            if(b==c) printf("%ld\n",a[b]);
                           
            else printf("%ld\n",getsum(b,c,1));
                           
            break;
                   }
                }
            return 0;
            }


            posted on 2010-02-17 13:33 lee1r 閱讀(303) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 算法與數(shù)據(jù)結(jié)構(gòu)
            久久久精品久久久久特色影视| 青草久久久国产线免观| 尹人香蕉久久99天天拍| 久久婷婷五月综合成人D啪| 欧美久久天天综合香蕉伊| 美女久久久久久| 亚洲精品NV久久久久久久久久| 99精品伊人久久久大香线蕉| 久久综合中文字幕| 久久精品成人免费观看97| 久久无码精品一区二区三区| 亚洲精品WWW久久久久久| 波多野结衣AV无码久久一区| 伊人久久大香线蕉综合Av| 丰满少妇人妻久久久久久| 国产日产久久高清欧美一区| 久久精品无码一区二区日韩AV| 亚洲精品无码专区久久同性男| 人妻精品久久无码专区精东影业| 久久免费精品视频| 欧美伊人久久大香线蕉综合| 久久精品aⅴ无码中文字字幕不卡 久久精品aⅴ无码中文字字幕重口 | A级毛片无码久久精品免费| 欧美成人免费观看久久| 久久香蕉国产线看观看99| 精品久久久久久国产| 久久久久无码国产精品不卡| 久久精品国产99国产电影网| 久久久精品人妻一区二区三区四| 青青草原综合久久大伊人| 久久久精品视频免费观看| 国产精品狼人久久久久影院| 亚洲国产精品久久久久| 一本伊大人香蕉久久网手机| 国内精品伊人久久久久| 久久99久久99小草精品免视看| 伊人久久大香线蕉AV色婷婷色| 久久精品中文字幕一区| 少妇内射兰兰久久| 99久久人妻无码精品系列| 97精品国产91久久久久久|