• <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>
            算法學社
            記錄難忘的征途
            posts - 141,comments - 220,trackbacks - 0

            題目描述:

               N(N<10000)多線段[l,r](1<=l<=r<=1,000,000,000)相互覆蓋,每個線段顏色不同,請問最后有多少種顏色?


            吐槽:

                1. 說好的平衡樹呢.... 扼.... 原諒我... 昨天包宿搞了一晚上這題... 今天一直頭痛,所以就沒有信心把維護數列那題再拿出來做了....
                2. 也是去年因為各種原因沒有填上的坑,貌似我一遇到離散化就悲劇???
                3. 不用make編譯的下場... 不用IDE的下場... 就是tm剛寫完然后就p顛p顛打了一句: g++ 2528.cc -o 2528.cc ...
                4. ... .. . .... 就這水平.... 省賽能行么...

            算法分析:

                線段覆蓋那部分可以和這題一起搞,也可以拿線段樹來搞。
                今天就寫了一個zkw版線段樹來搞...
                zkw版線段樹也是可以支持“懶惰標記”的.... 具體見ins()函數
                比較難搞的是離散化,看discuss板ms數據不完備??
                不過discuss板里的大牛的數據我都通過了,于是乎就說說我的方法把。
                    1. 把所有詢問的點抽出來排序.... 再去掉相同的
                    2. 如果點a[i]和點a[i+1]相差1,那么先不管,如果超過1,那么我們要在a[i]和a[i+1]之間再加一個點來表示“空白”
                應該很簡單吧.... 把“空白”表示出來就好...
             1 #include<iostream>
             2 #include<cstdio>
             3 #include<cstdlib>
             4 #include<algorithm>
             5 using namespace std;
             6 #define re(i,n) for(int i=0;i<n;i++)
             7 #define re1(i,n) for(int i=1;i<=n;i++)
             8 #define dbg(n) cout<<#n<<"="<<n<<endl;
             9 template <typename T> inline void chkmax(T &a, const T b){ if(a<b) a=b;}
            10 int seg[200005],M,__hash, base[30];
            11 int q,hash[40005][2],num[20005],query[10005][2],n;
            12 int ins(int l,int r, int color){
            13     for(l += M-1, r += M+1; l^r^1; l >>=1 , r>>=1){
            14         if(l&1^1) seg[l^1] = color;
            15         if(r&1) seg[r^1] = color;
            16     }
            17 }
            18 void build(){
            19     re(i,30) if(base[i]>__hash+1) {M = base[i]; break;}
            20     re(i,2*M) seg[i] = 0;
            21 }
            22 int cal(){
            23     int __ans = 0;
            24     re1(i,q) num[i] = 0;
            25     re1(i,__hash) {
            26         int pos = i+M;
            27         int color = seg[pos];
            28         while(pos>>=1) chkmax(color,seg[pos]);
            29         num[color] = 1;
            30     }
            31     re1(i,q) __ans += num[i];
            32     return __ans;
            33 }
            34 int find(int val){
            35     int l = 0, r = n;
            36     while(l<r){
            37         int mid = l+r >>1;
            38         if(hash[mid][0] < val) l = mid +1;
            39         else r = mid;
            40     }
            41     return hash[r][1];
            42 }
            43 int main(){
            44     int t;
            45     cin >>t;
            46     base[0] = 1;
            47     re(i,29) base[i+1] = base[i]*2;
            48     while(t--){
            49         int N = 0;
            50         scanf("%d",&q);
            51         re(i,q) {
            52             scanf("%d%d",&query[i][0],&query[i][1]);
            53             num[N++] = query[i][0]; num[N++] = query[i][1];
            54         }
            55          __hash = 0, n = 0;
            56         sort(num,num+N);
            57         re(i,N) {
            58             if(i == 0 || num[i] != num[i-1]){
            59                 __hash += 1 + (num[i] > num[i-1] + 1);
            60                 hash[n][0] = num[i];
            61                 hash[n][1] = __hash;
            62                 n ++;
            63             }
            64         }
            65         build();
            66         re(i,q){
            67             int l = find(query[i][0]), r = find(query[i][1]);
            68             ins(l,r,i+1);
            69         }
            70         printf("%d\n",cal());
            71     }
            72     return 0;
            73 }
            74 
            posted on 2012-05-03 19:21 西月弦 閱讀(547) 評論(0)  編輯 收藏 引用 所屬分類: 解題報告經典題目
            亚洲色大成网站WWW久久九九| 99久久国产宗和精品1上映| 久久精品国产2020| 丁香色欲久久久久久综合网| 久久99精品国产麻豆宅宅| 久久久久成人精品无码中文字幕| 久久精品桃花综合| 久久久久亚洲Av无码专| avtt天堂网久久精品| 麻豆精品久久久一区二区| 国产农村妇女毛片精品久久| 99久久免费国产精精品| 一级做a爰片久久毛片16| 国产成人综合久久精品尤物| 久久99中文字幕久久| 国产成人精品久久亚洲高清不卡 | 精品国产热久久久福利| 久久精品国产男包| 精品无码久久久久久国产| 伊人久久五月天| 青青热久久综合网伊人| 久久99这里只有精品国产| 91精品国产高清91久久久久久| 久久高潮一级毛片免费| 综合网日日天干夜夜久久| 久久综合综合久久97色| 久久精品国产欧美日韩99热| 三上悠亚久久精品| 亚洲国产精品18久久久久久| 久久超碰97人人做人人爱| 久久午夜无码鲁丝片午夜精品| 亚洲国产精品无码久久久不卡| 91超碰碰碰碰久久久久久综合| 亚洲AV无码久久精品狠狠爱浪潮 | 久久综合成人网| 欧美综合天天夜夜久久| 性欧美丰满熟妇XXXX性久久久| 久久男人中文字幕资源站| 国产精品久久久久久| 一本色道久久综合亚洲精品| 99久久精品毛片免费播放|