• <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>

            ArcTan

            dfs
            隨筆 - 16, 文章 - 117, 評論 - 6, 引用 - 0
            數據加載中……

            poj 3468 線段樹

            http://poj.org/problem?id=3468

            線段數的構造,查詢,修改!
            struct node{
               int l,r,m;
               long long sum;//當前區間的和
               long long add;//區間需要加上的數值
            }

            題意:
                  給定n個數字A1,A2,..,An,Q個操作。
                  C x y z,把區間x y內的數都加上z
                  Q x y,求區間x y內所有數的和。
            總結:
                  基礎代碼一定要對,調試了半天,最后發現是swap(x,y,t)寫錯了!!!!
                  WA了一次,數據是long long才行,要分析清楚數據范圍!!!

            #include <cstdio>
            #include 
            <cstdlib>
            #include 
            <cstring>
            #include 
            <cmath>
            #include 
            <ctime>
            #include 
            <cassert>
            #include 
            <iostream>
            #include 
            <sstream>
            #include 
            <fstream>
            #include 
            <map>
            #include 
            <set>
            #include 
            <vector>
            #include 
            <queue>
            #include 
            <algorithm>
            #define min(x,y) (x<y?x:y)
            #define max(x,y) (x>y?x:y)
            #define swap(x,y,t) (t=x,x=y,y=t)
            #define clr(list) memset(list,0,sizeof(list))
            #define LL long long
            #define maxn 200005
            using namespace std;
            struct node{
                
            int l,r,m;
                LL sum;
                LL add;
            } tree[
            2*maxn];
            int a[maxn];
            LL build(
            int l,int r,int root)
            {
                tree[root].l
            =l;
                tree[root].r
            =r;
                tree[root].m
            =(l+r)/2;
                tree[root].add
            =0;
                
            if (l==r)
                {
                    tree[root].sum
            =a[l];
                    
            return tree[root].sum;
                }
                
            long long sum_l=build(l,(l+r)/2,root*2);
                
            long long sum_r=build((l+r)/2+1,r,root*2+1);
                tree[root].sum
            =sum_l+sum_r;
                
            return tree[root].sum;
            }
            int insert(int l,int r,int add,int root)
            {
                
            if (l<=tree[root].l && r>=tree[root].r)
                {
                    tree[root].add
            +=add;
                    tree[root].sum
            +=add * (tree[root].r-tree[root].l+1);
                    
            return 0;
                }
                
            if (tree[root].add) //向下更新
                {
                    tree[
            2*root].sum+=tree[root].add * (tree[root*2].r-tree[root*2].l+1);
                    tree[
            2*root].add+=tree[root].add;
                    tree[
            2*root+1].sum+=tree[root].add * (tree[root*2+1].r-tree[root*2+1].l+1);
                    tree[
            2*root+1].add+=tree[root].add;
                    tree[root].add
            =0;
                }
                
            if (l<=tree[root].m)
                    insert(l,r,add,root
            *2);
                
            if (r>tree[root].m)
                    insert(l,r,add,root
            *2+1);
                tree[root].sum
            =tree[root*2].sum+tree[root*2+1].sum;   //這里回溯啊
                return 0;
            }
            LL search(
            int l,int r,int root)
            {
                
            if (l<=tree[root].l && r>=tree[root].r)
                    
            return tree[root].sum;
                
            if (tree[root].add)  //向下更新
                {
                    tree[
            2*root].sum+=tree[root].add * (tree[root*2].r-tree[root*2].l+1);
                    tree[
            2*root].add+=tree[root].add;
                    tree[
            2*root+1].sum+=tree[root].add * (tree[root*2+1].r-tree[root*2+1].l+1);
                    tree[
            2*root+1].add+=tree[root].add;
                    tree[root].add
            =0;
                }
                LL sum_l
            =0,sum_r=0;
                
            if (l<=tree[root].m)
                    sum_l
            =search(l,r,2*root);
                
            if (r>tree[root].m)
                    sum_r
            =search(l,r,2*root+1);
                
            return sum_l+sum_r;
            }
            int main()
            {
                
            int n,m;
                
            int x,y,z;
                
            int tmp;
                
            char ch;
                scanf(
            "%d%d",&n,&m);
                
            for (int i=1;i<=n;i++)
                    scanf(
            "%d",&a[i]);
                build(
            1,n,1);

                
            for (int i=1;i<=m;i++)
                {
                    scanf(
            "\n%c",&ch);
                    
            if (ch=='C')
                    {
                        scanf(
            "%d%d%d",&x,&y,&z);
                        
            if (x>y)
                            swap(x,y,tmp);
                        insert(x,y,z,
            1);
                    }
                    
            else
                    {
                        scanf(
            "%d%d",&x,&y);
                        
            if (x>y)
                            swap(x,y,tmp);
                        printf(
            "%I64d\n",search(x,y,1));
                    }
                }
                
            return 0;
            }


            posted on 2012-07-25 10:54 wangs 閱讀(413) 評論(0)  編輯 收藏 引用 所屬分類: ACM-數據結構

            狠狠色丁香久久婷婷综合图片| 成人久久精品一区二区三区| 久久久久精品国产亚洲AV无码| 国产综合精品久久亚洲| 婷婷综合久久狠狠色99h| 国产免费久久精品丫丫| 亚洲欧美一级久久精品| 久久综合综合久久狠狠狠97色88| 久久精品国产亚洲AV无码娇色| 亚洲伊人久久大香线蕉苏妲己| 久久久久亚洲AV综合波多野结衣| 国产亚洲精久久久久久无码77777| 久久精品蜜芽亚洲国产AV| 久久精品国产一区二区三区不卡 | 国产精品久久久天天影视香蕉| 99久久精品国产一区二区蜜芽| 7777精品伊人久久久大香线蕉| 久久精品国产91久久综合麻豆自制| 成人亚洲欧美久久久久| 伊人久久综合无码成人网| 国产AV影片久久久久久| 亚洲色大成网站www久久九 | 久久青青草原综合伊人| 久久久久久久综合日本| 久久99国产亚洲高清观看首页| 亚洲精品蜜桃久久久久久| 国内精品久久久久久久亚洲| 国产成人综合久久综合| 久久精品欧美日韩精品| 久久天堂AV综合合色蜜桃网| 亚洲人成电影网站久久| 日韩欧美亚洲综合久久影院d3| 99久久99久久久精品齐齐| 亚洲精品无码久久久久去q| 久久久久久久久久久久久久| 久久天天躁狠狠躁夜夜av浪潮 | 日本免费一区二区久久人人澡| 欧美亚洲色综久久精品国产| 青春久久| 久久综合视频网| 日产精品久久久久久久|