• <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
            題目描述:
                給N(N<5000)個(gè)矩形,求周長(zhǎng)并。
            吐槽:
            1. 因?yàn)樽罱木Χ挤旁跀?shù)電試驗(yàn)和大作業(yè)上,所以博客不常更新了 ... 就算更新也會(huì)寫(xiě)一些好做的模板題
            2. 依舊是掃描線 ... ym傻崽大神
            算法分析:
                掃描線法求周長(zhǎng)并,其中用線段樹(shù)維護(hù)橫向線段的加入與刪除操作。
                有個(gè)很重要的地方就是一定要先加邊再刪除邊。
             1 #include<iostream>
             2 #include<algorithm>
             3 #include<cstring>
             4 #include<cstdlib>
             5 #include<cstdio>
             6 using namespace std;
             7 #define lson pos<<1,L,mid
             8 #define rson pos<<1|1,mid+1,R
             9 #define left LL
            10 #define right RR
            11 const int N = 22005;
            12 int seg[N<<2], left[N<<2], right[N<<2], cnt[N<<2], sum[N<<2];
            13 void pushup(int pos, int L,int R){
            14     if(cnt[pos]) {
            15         seg[pos] = 1;
            16         left[pos] = right[pos] = 1;
            17         sum[pos] = R-L+1;
            18     }
            19     else if(L==R) {
            20         seg[pos] = 0;
            21         sum[pos] = 0;
            22         left[pos] = right[pos] = 0;
            23     }
            24     else {
            25         seg[pos] = seg[pos<<1] + seg[pos<<1|1] - (right[pos << 1] && left[pos << 1|1]);
            26         left[pos] = left[pos<<1];
            27         right[pos] = right[pos<<1|1];
            28         sum[pos] = sum[pos<<1] + sum[pos <<1|1];
            29     }
            30 }
            31 void update(int l,int r,int pos, int L,int R,int c){
            32     if(l <= L && R<= r){
            33         cnt[pos] += c;
            34         pushup(pos, L, R);
            35         return ;
            36     }
            37     int mid = L + R >> 1;
            38     if(l <= mid) update(l,r,lson,c);
            39     if(r > mid) update(l,r,rson,c);
            40     pushup(pos , L, R);
            41 }
            42 struct segment{
            43     int l,r,h,p;
            44     segment(){}
            45     segment(int L,int R,int H,int P): l(L), r(R), h(H), p(P){}
            46     bool operator < (const segment A) const {
            47         if(h == A.h) return p > A.p;
            48         return h < A.h;
            49     }
            50 }num[N];
            51 int main(){
            52     int n;
            53     while(~scanf("%d",&n)){
            54         int len = 0;
            55         for(int i=0;i<n;i++){
            56             int x0,y0,x1,y1;
            57             scanf("%d%d%d%d",&x0,&y0,&x1,&y1);
            58             num[len++] = segment(x0,x1-1,y0,1);
            59             num[len++] = segment(x0,x1-1,y1,-1);
            60         }
            61         sort(num,num+len);
            62         int last = 0, ans = 0;
            63         memset(cnt,0,sizeof(cnt));
            64         memset(sum,0,sizeof(sum));
            65         memset(seg,0,sizeof(seg));
            66         memset(left,0,sizeof(left));
            67         memset(right,0,sizeof(right));
            68         for(int i=0;i<len-1; i++){
            69             update(num[i].l,num[i].r,1,-10000,10000,num[i].p);
            70             ans += abs(sum[1]-last) ;
            71             last = sum[1];
            72             ans += (num[i+1].h-num[i].h) * seg[1] * 2;
            73         }
            74         ans += sum[1];
            75         cout<<ans<<endl;
            76     }
            77 }
            78 
            posted on 2012-06-04 20:54 西月弦 閱讀(473) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 解題報(bào)告經(jīng)典題目
            久久免费小视频| 久久久亚洲欧洲日产国码二区| 四虎久久影院| 国产精品美女久久久久久2018| 狠狠干狠狠久久| 热99RE久久精品这里都是精品免费 | 亚洲Av无码国产情品久久| 伊人久久大香线焦AV综合影院| 中文字幕一区二区三区久久网站 | 国产亚洲美女精品久久久| 久久精品国产免费观看三人同眠| 久久久久久久综合日本亚洲| 色综合久久综合中文综合网| 久久笫一福利免费导航 | 精品无码久久久久国产| 一级做a爰片久久毛片免费陪| 久久99国产精一区二区三区| 色婷婷综合久久久久中文| 亚洲v国产v天堂a无码久久| 99久久99久久精品国产| 国产精品久久久久jk制服| 亚洲伊人久久大香线蕉综合图片| 亚洲精品久久久www| 亚洲国产高清精品线久久| 国产成人精品久久综合| 久久久国产精品网站| 久久精品国产99国产精品澳门| 久久99国产综合精品免费| 午夜精品久久久久久久久| 久久亚洲精品无码AV红樱桃| 日产精品久久久久久久| 激情伊人五月天久久综合| 91精品国产9l久久久久| 久久国产精品久久国产精品| 天天爽天天爽天天片a久久网| 人人狠狠综合久久亚洲婷婷| 99久久亚洲综合精品成人| 精品久久久无码中文字幕天天| 国产福利电影一区二区三区久久老子无码午夜伦不 | 人妻无码久久一区二区三区免费| 一本久久a久久精品vr综合|