• <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 西月弦 閱讀(550) 評論(0)  編輯 收藏 引用 所屬分類: 解題報告經典題目
            精品久久久久国产免费| 久久国产三级无码一区二区| 天天躁日日躁狠狠久久| 99精品国产免费久久久久久下载| 99久久99久久精品国产片果冻| 久久天天婷婷五月俺也去| 国产成年无码久久久免费| 999久久久无码国产精品| 亚洲а∨天堂久久精品| 99久久成人国产精品免费| 久久99国产综合精品| 精品国产乱码久久久久久呢| 亚洲精品WWW久久久久久| 国产一区二区精品久久| 国产亚洲综合久久系列| 蜜臀久久99精品久久久久久小说| 亚洲精品第一综合99久久| 久久久久国产| 久久无码高潮喷水| 国产成年无码久久久久毛片| 久久久久亚洲AV无码专区体验| 久久久久国产一级毛片高清版| 久久亚洲精精品中文字幕| 国产精品热久久毛片| 精品久久8x国产免费观看| 亚洲AV日韩AV永久无码久久| av午夜福利一片免费看久久| 精品无码久久久久久尤物| 久久精品国产91久久麻豆自制| 国内精品久久久久影院日本| 国产精品久久久久久久久| 国产精品18久久久久久vr| 久久青青草原精品国产软件| 欧美久久久久久| 蜜桃麻豆www久久| 久久国产精品久久国产精品| 精品久久久久久国产| 青青草原精品99久久精品66| 亚洲女久久久噜噜噜熟女| 久久无码AV中文出轨人妻| 日韩精品久久久肉伦网站|