• <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>
            這個題目本質上要解決一個問題,給出一些區間[ai, bi)和一個數組,求數組中每個元素被區間覆蓋的次數。

            一開始想了個做法是線段樹,后來想了個O(n)的做法。具體過程如下:
            1。去掉重復區間
            2。f數組置0
            3。對每個區間[ai, bi),令f[ai]++,f[bi]--
            4。設答案數組為c,則c[i] = sum(f[j]), 1 <= j <= i

            關鍵是理解f數組的意義:f[i]表示第i個點對后續點的影響,而f[ai]++,f[bi]--保證了區間外的點不受影響,區間內的點都受+1的影響

            以下是我的代碼:

            /*************************************************************************
            Author: WHU_GCC
            Created Time: 2008-1-12 21:14:15
            File Name: pku3263.cpp
            Description: 
            ***********************************************************************
            */

            #include 
            <iostream>
            using namespace std;

            #define out(x) (cout << #x << ": " << x << endl)
            typedef 
            long long int64;
            const int maxint = 0x7FFFFFFF;
            const int64 maxint64 = 0x7FFFFFFFFFFFFFFFLL;
            template 
            <class T> void show(T a, int n) for (int i = 0; i < n; ++i) cout << a[i] << ' '; cout << endl; }
            template 
            <class T> void show(T a, int r, int l) for (int i = 0; i < r; ++i) show(a[i], l); cout << endl; }

            const int maxr = 10010;
            const int maxn = 10010;

            struct node_t
            {
                
            int l, r;
            }
            ;

            bool operator ==(const node_t &a, const node_t &b)
            {
                
            return a.l == b.l && a.r == b.r;
            }


            bool operator <(const node_t &a, const node_t &b)
            {
                
            return a.l < b.l || a.l == b.l && a.r < b.r;
            }


            node_t p[maxr];
            int f[maxn];
            int a[maxn];

            int n, I, H, r;

            int main()
            {
                scanf(
            "%d%d%d%d"&n, &I, &H, &r);
                
            for (int i = 0; i < r; i++)
                
            {
                    scanf(
            "%d%d"&p[i].l, &p[i].r);
                    
            if (p[i].l > p[i].r)
                        swap(p[i].l, p[i].r);
                }

                sort(p, p 
            + r);
                r 
            = unique(p, p + r) - p;
                memset(f, 
            0sizeof(f));
                
            for (int i = 0; i < r; i++)
                
            {
                    f[p[i].l 
            + 1]--;
                    f[p[i].r]
            ++;
                }

                a[
            0= 0;
                
            for (int i = 1; i <= n; i++)
                    a[i] 
            = a[i - 1+ f[i];
                
            for (int i = 1; i <= n; i++)
                    printf(
            "%d\n", a[i] + H);
                
            return 0;
            }

            posted on 2008-01-12 22:02 Felicia 閱讀(429) 評論(1)  編輯 收藏 引用 所屬分類: 雜題
            Comments
            • # re: [雜題]pku3263 區間性質
              Felicia
              Posted @ 2008-01-12 22:03
              實現的時候因為排序,成了O(nlogn)的了  回復  更多評論   
             
            久久久久久久综合狠狠综合| 国产精品一区二区久久国产| 国产一区二区精品久久岳| 久久精品国产亚洲沈樵| 国产99久久久国产精免费| 欧美久久亚洲精品| 日韩精品久久久久久久电影蜜臀| 久久99精品综合国产首页| 久久精品国产精品亚洲| 久久精品国产亚洲av高清漫画| 久久精品国产一区二区三区不卡| 亚洲国产精品久久电影欧美| 天天爽天天爽天天片a久久网| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 久久99精品国产麻豆宅宅| 国产精品久久久久久| 亚洲国产香蕉人人爽成AV片久久| 亚洲乱码中文字幕久久孕妇黑人| 欧美日韩精品久久久久| 久久精品人人槡人妻人人玩AV| 久久久久久国产精品美女| 91久久婷婷国产综合精品青草| 91精品国产综合久久精品| 国产精品久久免费| 日韩人妻无码精品久久免费一 | 香蕉久久av一区二区三区| 四虎国产精品成人免费久久| 精品国产婷婷久久久| 99久久人妻无码精品系列| 欧美精品九九99久久在观看| 国产亚州精品女人久久久久久| 色婷婷久久综合中文久久蜜桃av | 久久综合亚洲色一区二区三区 | 久久久久人妻一区二区三区| 欧美精品一区二区久久| 99久久亚洲综合精品成人| 狠色狠色狠狠色综合久久| 高清免费久久午夜精品| 久久精品国产91久久综合麻豆自制 | 国产V综合V亚洲欧美久久| 国产美女久久精品香蕉69|