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

            題目描述:

                定義區(qū)間的交,并,差操作。假設(shè)當(dāng)前坐標(biāo)軸區(qū)間集合為S(開始為空),給大量的詢問(wèn),格式為 命令+區(qū)間T,命令'I'代表S = S交T,'U'代表并,D和C代表S=S-T和S=T-S,S代表S=S-T并T-S。輸出最后的區(qū)間集合S。

            吐槽:

                1. 從昨天下午做到今天晚上... 好吧我承認(rèn)我弱
                2. 一開始沒(méi)有用延時(shí)操作,記錄了每個(gè)操作的時(shí)間,最后離線處理。然后我抓狂了....
                3. 后來(lái)改用樸素版線段樹,寫著寫著發(fā)現(xiàn)這些不是用zkw版線段樹也能實(shí)現(xiàn)么... 然后就調(diào)到了今天晚上...
                4. 由于實(shí)現(xiàn)的關(guān)系,運(yùn)行速度與樸素版旗鼓相當(dāng)..........

            算法描述:

                首先將L和R乘以2以解決開閉區(qū)間的問(wèn)題....
                
                剩下的其實(shí)就是線段覆蓋問(wèn)題:
                    1. U: 將[L,R]賦值為1
                    2. I: 將[0,L-1] 和 [R+1,MAXN]賦值為0
                    3. D: 將[L,R]賦值為0
                    4. S: 將[L,R]里的所有值取反
                    5. C: 將[L,R]里的所有值取反,并且將[0,L-1]和[R+1,MAXN]賦值為0
                賦值那部分就不講了.... 主要是取反,用到線段樹的延時(shí)操作,然后再下次訪問(wèn)的時(shí)候向下更新(樸素版的思路)
                其實(shí)zkw版可以先預(yù)處理一下,就是將1到L-1的點(diǎn)順次更新一遍(因?yàn)樵谏厦娴牟僮骺隙ㄊ呛蠹拥?,然后將1到R+1的點(diǎn)順次更新一遍。
                這樣做一定可以將需要維護(hù)的節(jié)點(diǎn)預(yù)先更新一遍...
                
                最后統(tǒng)計(jì)的時(shí)候掃一遍就可以了...
                ms比樸素版還是好寫一些的...
             1 #include<iostream>
             2 #include<cassert>
             3 #include<cstring>
             4 #include<cstdio>
             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 re2(i,n) for(int i=0;i<=n;i++)
             9 #define re3(i,n) for(int i=1;i<n;i++)
            10 #define debug1
            11 const int V = 66000*2;
            12 int M;
            13 struct node{
            14     int color,x;
            15     node(){color=x=0;}
            16 } seg[V*4];
            17 void solve(int x){
            18     if(seg[x].color!=-1) seg[x].color ^= 1;
            19     else seg[x].x ^= 1;
            20 }
            21 void upt(int x){
            22     if(x==1) return;
            23     upt(x>>1);
            24     if(x >M) return;
            25     if(seg[x].color!=-1){
            26         seg[x<<1].color = seg[x<<1|1].color = seg[x].color;
            27         seg[x<<1].x = seg[x<<1|1].x =0;
            28         seg[x].color = -1;
            29     }
            30     if(seg[x].x){
            31         solve(x <<1);
            32         solve(x <<1|1);
            33         seg[x].x = 0;
            34     }
            35 }
            36 void ins(int l,int r,int p,int c=0){
            37     if(l>r) return;
            38     l = M+l; r = M+r+2;
            39     upt(l); upt(r);
            40     for(;l^r^1;l>>=1,r>>=1){
            41         if(l&1^1) if(p) solve(l^1); else seg[l^1].color = c, seg[l^1].x = 0;
            42         if(r&1) if(p) solve(r^1); else seg[r^1].color = c, seg[r^1].x = 0;
            43     }
            44 }
            45 inline void OP(int l,int r){
            46     printf("%c%d,%d%c ", l&1 ? '(':'[', l>>1 , r&1 ? r+1>>1: r>>1, r&1?')':']');
            47 }
            48 int main(){
            49     char cmd[2];
            50     int l,r;char x,y;
            51     re(i,30) if((1<<i) > V) {M = 1<<i; break;}
            52     while(~scanf("%s %c%d,%d%c",cmd,&x,&l,&r,&y)){
            53     //    printf("%s %s\n",cmd,ch);
            54         l<<=1,r<<=1; if(x=='(') l++; if(y==')') r--;
            55         switch(cmd[0]){
            56             case 'U': 
            57                 ins(l,r,0,1); break;
            58             case 'I': 
            59                 ins(0,l-1,0,0); ins(r+1,V,0,0); break;
            60             case 'C': 
            61                 ins(l,r,1); ins(0,l-1,0,0); ins(r+1,V,0,0); break;
            62             case 'D': ins(l,r,0,0); break;
            63             case 'S': ins(l,r,1); break;
            64         }
            65     }
            66     int flag = 0,f = 0;
            67     for(int i = M+1;i<M+V;i++){
            68         upt(i);
            69         if(seg[i].color){
            70             if(flag) ++r;
            71             else r=l=i,flag=1;
            72         }
            73         else if(flag){
            74             f = 1;
            75             OP(l-M-1,r-M-1);
            76             flag = 0;
            77         }
            78     }
            79     if(!f) puts("empty set"); else
            80     puts("");
            81 }
            82 
            posted on 2012-05-07 20:21 西月弦 閱讀(1645) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 解題報(bào)告經(jīng)典題目
            波多野结衣中文字幕久久| 久久艹国产| 99国产欧美久久久精品蜜芽| 久久久一本精品99久久精品88| 亚洲国产欧洲综合997久久| av午夜福利一片免费看久久| 久久性生大片免费观看性| 伊人久久大香线蕉综合Av| 国内精品久久久久久不卡影院| 亚洲?V乱码久久精品蜜桃| 2021久久国自产拍精品| 香蕉aa三级久久毛片| 久久香蕉综合色一综合色88| 久久久久人妻一区二区三区| 91性高湖久久久久| 久久香蕉超碰97国产精品| 久久九九免费高清视频| 久久久久久毛片免费播放| 亚洲国产精品无码久久青草| 久久国产精品一区二区| 亚洲精品蜜桃久久久久久| 久久国产亚洲精品| 久久国产精品二国产精品| 国产亚洲色婷婷久久99精品| 久久久久久精品免费免费自慰| 国内精品久久久久久久亚洲| 久久综合九色综合97_久久久| 无码人妻少妇久久中文字幕蜜桃| 久久无码AV中文出轨人妻| 一本一道久久精品综合| 国产99精品久久| 久久99精品综合国产首页| 久久99精品久久只有精品| 99久久超碰中文字幕伊人| 久久久婷婷五月亚洲97号色| 人妻精品久久无码专区精东影业 | 精品久久无码中文字幕| 漂亮人妻被中出中文字幕久久| 久久这里只有精品视频99| 亚洲午夜久久久| 亚洲av伊人久久综合密臀性色|