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

            糯米

            TI DaVinci, gstreamer, ffmpeg
            隨筆 - 167, 文章 - 0, 評(píng)論 - 47, 引用 - 0
            數(shù)據(jù)加載中……

            POJ 3468 A Simple Problem with Integers 線段樹

            思路:
            每個(gè)節(jié)點(diǎn)記錄兩個(gè)值:
            所有子節(jié)點(diǎn)的增量和
            該節(jié)點(diǎn)的增量

            代碼爛,1500+ms。
            為了避免爆棧,實(shí)現(xiàn)計(jì)算好了左右邊界和中間值。

            #include <stdio.h>
            #include 
            <stdlib.h>

            #define MAX_N 100032

            int N;
            struct {
                __int64 up, down;
                
            int rl, rr, rm;
            }
             tree[MAX_N*4];


            enum OP {
                INSERT,
                SUM,
            }
             op;

            __int64 val;

            void tree_op(int idx, int l, int r)
            {
                
            if (op == INSERT) {
                    
            if (tree[idx].rl == l && tree[idx].rr == r) {
                        tree[idx].up 
            += val;
                        
            return ;
                    }

                    tree[idx].down 
            += val * (r - l + 1);
                }
             else {
                    val 
            += tree[idx].up * (r - l + 1);
                    
            if (tree[idx].rl == l && tree[idx].rr == r) {
                        val 
            += tree[idx].down;
                        
            return ;
                    }

                }


                
            if (r <= tree[idx].rm) {
                    
            // all in left
                    tree_op(idx*2, l, r);
                }
             else if (l > tree[idx].rm) {
                    
            // all in right
                    tree_op(idx*2+1, l, r);
                }
             else {
                    
            // in left and right
                    tree_op(idx*2, l, tree[idx].rm);
                    tree_op(idx
            *2+1, tree[idx].rm + 1, r);
                }

            }


            int main()
            {
                
            int i, j, q;
                
            char str[16];

                freopen(
            "e:\\test\\in.txt""r", stdin);

                tree[
            1].rl = 1;
                tree[
            1].rm = (MAX_N + 1/ 2;
                tree[
            1].rr = MAX_N;
                
            for (i = 2; i < _countof(tree); i++{
                    
            if (i & 1{
                        tree[i].rl 
            = tree[i/2].rm + 1;
                        tree[i].rr 
            = tree[i/2].rr;
                    }
             else {
                        tree[i].rl 
            = tree[i/2].rl;
                        tree[i].rr 
            = tree[i/2].rm;
                    }

                    tree[i].rm 
            = (tree[i].rl + tree[i].rr) / 2;
                }


                scanf(
            "%d%d"&N, &q);
                op 
            = INSERT;
                
            for (i = 1; i <= N; i++{
                    scanf(
            "%I64d"&val);
                    tree_op(
            1, i, i);
                }


                
            while (q--{
                    scanf(
            "%s%d%d", str, &i, &j);
                    
            if (str[0== 'Q'{
                        val 
            = 0;
                        op 
            = SUM;
                        tree_op(
            1, i, j);
                        printf(
            "%I64d\n", val);
                    }
             else {
                        scanf(
            "%I64d"&val);
                        op 
            = INSERT;
                        tree_op(
            1, i, j);
                    }

                }


                
            return 0;
            }

            posted on 2010-02-28 23:47 糯米 閱讀(376) 評(píng)論(0)  編輯 收藏 引用 所屬分類: POJ

            国产精品岛国久久久久| 国产精品久久久久久久人人看| 精品久久久无码21p发布| 青青青国产精品国产精品久久久久| 国产69精品久久久久久人妻精品| 无码任你躁久久久久久| 激情综合色综合久久综合| 91精品国产91热久久久久福利| 久久久91精品国产一区二区三区 | 精品无码久久久久久国产| 免费精品99久久国产综合精品| 久久精品麻豆日日躁夜夜躁| 婷婷伊人久久大香线蕉AV | 久久精品夜夜夜夜夜久久| 99久久夜色精品国产网站| 精产国品久久一二三产区区别| 久久久久久亚洲精品影院| 亚洲中文字幕无码久久综合网| 77777亚洲午夜久久多喷| 亚洲伊人久久精品影院| 国产精品99精品久久免费| 国产精品久久久久影院嫩草| 成人国内精品久久久久一区| 久久91精品国产91久久麻豆| 国产精品久久久久久一区二区三区| 国产精品久久久久久搜索| 国产成人AV综合久久| 亚洲欧洲精品成人久久奇米网| 波多野结衣久久| 久久久久久久久无码精品亚洲日韩| 99精品久久久久中文字幕| 一级做a爰片久久毛片16| 日韩久久久久中文字幕人妻 | 精品九九久久国内精品| 国产成人久久精品麻豆一区| 免费一级做a爰片久久毛片潮| 久久人人青草97香蕉| 久久99国产亚洲高清观看首页 | 2021国产精品午夜久久| 国产精品免费看久久久| 亚洲国产成人久久综合野外|