青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 97, 文章 - 22, 評(píng)論 - 81, 引用 - 0
數(shù)據(jù)加載中……

HDU 3265 Posters

題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=3265
/*
題意:
    給定N(N <= 50000)個(gè)中空的矩形紙片,求它們面積并。

解法:
離散化+線段樹

思路:
    2010年寧波區(qū)域賽的題,就是矩形面積并的一個(gè)變形,轉(zhuǎn)化很容
易想到,將中空的矩形紙片分割成四個(gè)小的矩形然后求N*4個(gè)矩形的
面積并即可。
    再總結(jié)一下矩形面積并的nlog(n)經(jīng)典算法吧。首先我們將每個(gè)矩
形的縱向邊投影到Y(jié)軸上,這樣就可以把矩形的縱向邊看成一個(gè)閉區(qū)間
,用線段樹來維護(hù)這些矩形邊的并。現(xiàn)在求的是矩形的面積并,于是可
以枚舉矩形的x坐標(biāo),然后檢測(cè)當(dāng)前相鄰x坐標(biāo)上y方向的合法長(zhǎng)度,兩
者相乘就是其中一塊面積,枚舉完畢后就求得了所有矩形的面積并。
    我的線段樹結(jié)點(diǎn)描述保存了以下信息:區(qū)間的左右端點(diǎn)、結(jié)點(diǎn)所在
數(shù)組編號(hào)(因?yàn)椴捎渺o態(tài)結(jié)點(diǎn)可以大大節(jié)省申請(qǐng)空間的時(shí)間)、該結(jié)點(diǎn)
被豎直線段完全覆蓋的次數(shù)Cover和當(dāng)前結(jié)點(diǎn)的測(cè)度。測(cè)度是指相鄰x坐
標(biāo)之間有效的y方向的長(zhǎng)度的和(要求在該區(qū)間內(nèi))。于是重點(diǎn)就在于
如何維護(hù)測(cè)度,我們將一個(gè)矩形分成兩條豎直線段來存儲(chǔ),左邊的邊稱
為入邊,右邊的邊則為出邊,然后把所有這些豎直線段按照x坐標(biāo)遞增排
序,每次進(jìn)行插入操作,因?yàn)樽鴺?biāo)有可能不是整數(shù),所以必須在做這些
之前將y方向的坐標(biāo)離散化到數(shù)組中,每次插入時(shí)如果當(dāng)前區(qū)間被完全覆
蓋,那么就要對(duì)Cover域進(jìn)行更新,入邊+1,出邊-1。更新完畢后判斷當(dāng)
前結(jié)點(diǎn)的Cover域是否大于零,如果大于零那么當(dāng)前節(jié)點(diǎn)的測(cè)度就是結(jié)點(diǎn)
管理區(qū)間在y軸上的實(shí)際長(zhǎng)度,否則,如果是葉子節(jié)點(diǎn),那么測(cè)度為0,
如果是內(nèi)部結(jié)點(diǎn),那么測(cè)度的值是左右兒子測(cè)度的和。這個(gè)更新是log(n)
的,所以,總的復(fù)雜度就是nlog(n)。
*/


#include 
<iostream>
#include 
<vector>
#include 
<algorithm>
using namespace std;

typedef 
int Type;
#define ll __int64
#define maxn 200200

// 垂直線段
struct VLine {
    Type x;
    Type y1, y2;
    
int val;
    VLine() 
{}
    VLine(
int _x, int _y1, int _y2, int _v) {
        x 
= _x;
        y1 
= _y1;
        y2 
= _y2;
        val 
= _v;
    }

}
;
vector 
<VLine> Vl;

bool cmp(VLine a, VLine b) {
    
return a.x < b.x;
}


// 矩形
struct Rectangle {
    
int x0, y0, x1, y1;
    Rectangle() 
{}
    Rectangle(
int _x0, int _y0, int _x1, int _y1) {
        x0 
= _x0; y0 = _y0;
        x1 
= _x1; y1 = _y1;
    }

}
;
vector 
<Rectangle> Rec;

int tmp[maxn], tmpsize;
int bin[maxn], size;

struct Tree {
    
int p;
    
int l, r;
    
int nCover;  // 被完全覆蓋的次數(shù)
    Type ylen;   // 測(cè)度

    
void Update() {
        
if(nCover > 0)
            ylen 
= bin[r] - bin[l];
        
else {
            
if(l + 1 == r)
                ylen 
= 0;
            
else {
                ylen 
= T[p<<1].ylen + T[p<<1|1].ylen;
            }

        }

    }


    
int Mid() {
        
return (l + r) >> 1;
    }

}
T[maxn*4];

void Build(int p, int l, int r) {
    T[p].l 
= l;
    T[p].r 
= r;
    T[p].p 
= p;
    T[p].ylen 
= T[p].nCover = 0;
    
if(l + 1 == r || l == r)
        
return ;
    
int mid = (l + r) >> 1;
    Build(p
<<1, l, mid);
    Build(p
<<1|1, mid, r);
}


void Insert(int p, int l, int r, int val) {
    
    
if(l <= T[p].l && T[p].r <= r) {
        T[p].nCover 
+= val;
        T[p].Update();
        
return ;
    }


    
int mid = T[p].Mid();
    
if(l < mid) {
        Insert(p
<<1, l, r, val);
    }

    
if(mid < r) {
        Insert(p
<<1|1, l, r, val);
    }

    T[p].Update();
}


void ProcessBinArray() {
    sort(tmp, tmp 
+ tmpsize);
    bin[size 
= 1= tmp[0];
    
int i;
    
for(i = 1; i < tmpsize; i++{
        
if(tmp[i] != tmp[i-1])
            bin[
++size] = tmp[i];
    }

}


int Binary(int v) {
    
int l = 1;
    
int r = size;
    
while(l <= r) {
        
int m = (l + r) >> 1;
        
if(bin[m] == v)
            
return m;
        
if(v > bin[m]) {
            l 
= m + 1;
        }
else
            r 
= m - 1;
    }

}


int main() {
    
int n;
    
int i, j;
    Type x[
4], y[4];
    
while(scanf("%d"&n) != EOF && n) {
        Rec.clear();
        Vl.clear();
        tmpsize 
= 0;

        
for(i = 0; i < n; i++{
            
for(j = 0; j < 4; j++{
                scanf(
"%d %d"&x[j], &y[j]);
                tmp[ tmpsize
++ ] = y[j];
            }

            Rec.push_back(Rectangle(x[
0], y[0], x[2], y[1]));
            Rec.push_back(Rectangle(x[
2], y[0], x[3], y[2]));
            Rec.push_back(Rectangle(x[
2], y[3], x[3], y[1]));
            Rec.push_back(Rectangle(x[
3], y[0], x[1], y[1]));
        }

        ProcessBinArray();

        
for(i = 0; i < Rec.size(); i++{
            Rectangle
& rt = Rec[i];
            
if(rt.x0 == rt.x1 || rt.y0 == rt.y1)
                
continue;
            
int y0 = Binary(rt.y0);
            
int y1 = Binary(rt.y1);
            Vl.push_back(VLine(rt.x0, y0, y1, 
1));
            Vl.push_back(VLine(rt.x1, y0, y1, 
-1));
        }

        sort(Vl.begin(), Vl.end(), cmp);
        Build(
11, size);

        ll ans 
= 0;
        
for(i = 0; i < Vl.size(); i++{
            
if(i) {
                ans 
+= (ll)(Vl[i].x - Vl[i-1].x) * T[1].ylen;
            }

            Insert(
1, Vl[i].y1, Vl[i].y2, Vl[i].val);
        }

        printf(
"%I64d\n", ans);
    }

    
return 0;
}

posted on 2011-03-29 21:09 英雄哪里出來 閱讀(1482) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 線段樹

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美日韩国产色综合一二三四 | 亚洲福利视频一区| 99国产精品视频免费观看| 亚洲激情小视频| 欧美电影免费| 亚洲日本va午夜在线影院| 亚洲精品在线免费| 欧美人在线视频| 亚洲一区视频在线观看视频| 午夜一级久久| 国产婷婷一区二区| 久久精品网址| 亚洲国产另类 国产精品国产免费| 亚洲特级片在线| 国产欧美亚洲一区| 久久永久免费| 日韩视频免费在线| 久久综合色婷婷| 亚洲黄网站在线观看| 国内精品久久国产| 欧美国产先锋| 久久成人一区| 日韩午夜电影| 日韩亚洲欧美精品| 亚洲精品久久久久久久久久久| 麻豆亚洲精品| 欧美77777| 亚洲尤物在线视频观看| 韩国欧美一区| 国产精品99一区二区| 久久精品三级| 久久五月天婷婷| 亚洲欧美日韩一区在线观看| 欧美jizz19hd性欧美| 欧美超级免费视 在线| 女女同性女同一区二区三区91| 久久久久久久999| 中文av字幕一区| 亚洲天堂成人在线视频| 亚洲综合日韩中文字幕v在线| 在线亚洲伦理| 亚洲区一区二| 亚洲电影网站| 国产精品一区免费视频| 欧美日韩1区| 欧美少妇一区| 欧美日韩一区三区| 欧美精品在线视频| 欧美日韩综合| 国产乱码精品一区二区三区不卡 | 久久精品亚洲一区二区| 在线综合亚洲| 午夜亚洲福利| 亚洲永久视频| 久久精品视频在线看| 蜜桃av久久久亚洲精品| 久久精品国内一区二区三区| 理论片一区二区在线| 亚洲国产日韩精品| 一区二区三区av| 亚洲三级视频| 亚洲男人的天堂在线aⅴ视频| 9久草视频在线视频精品| 亚洲图片在区色| 夜夜嗨av一区二区三区四区 | 国内精品视频久久| 亚洲日本无吗高清不卡| 亚洲国产裸拍裸体视频在线观看乱了中文 | 一区二区三区欧美成人| 午夜精品久久久久久99热软件| 久久青青草原一区二区| 欧美日韩免费观看一区| 国产乱码精品一区二区三区五月婷| 国内精品久久久久久久影视麻豆| 亚洲国产你懂的| 午夜在线电影亚洲一区| 欧美激情二区三区| 欧美不卡视频一区| 在线视频精品一| 亚洲一级免费视频| 蜜臀a∨国产成人精品 | 国产欧美精品国产国产专区| 91久久国产综合久久91精品网站 | 欧美激情一二区| 亚洲一区二区三区中文字幕在线 | 欧美在线亚洲| 久久久999精品| 欧美日韩一区二区在线观看视频| 极品裸体白嫩激情啪啪国产精品| 亚洲国产精品视频一区| 亚洲美女视频在线观看| 久久久久久午夜| 欧美激情中文不卡| 亚洲欧美在线另类| 欧美日韩1区2区| 亚洲国产成人精品久久| 久久高清免费观看| 欧美韩日高清| 欧美一区二区三区免费看| 久久午夜国产精品| 国产欧美午夜| 亚洲在线视频| 日韩亚洲欧美精品| 欧美成人蜜桃| 在线色欧美三级视频| 欧美专区一区二区三区| 一本色道久久| 欧美日韩高清区| 亚洲精品专区| 欧美二区在线| 制服丝袜亚洲播放| 欧美黄污视频| 亚洲人在线视频| 欧美成人综合网站| 久久久免费精品| 国产精品久久午夜夜伦鲁鲁| 国自产拍偷拍福利精品免费一| 欧美一区二区视频观看视频| 亚洲国产精品一区二区www| 久久精品一区四区| 国产视频精品网| 欧美在线免费| 午夜精品国产| 国产亚洲精品久久久久久| 日韩视频免费看| 亚洲国产精品精华液网站| 理论片一区二区在线| 亚洲国产婷婷香蕉久久久久久| 久久久久久91香蕉国产| 欧美一级黄色录像| 国内一区二区三区在线视频| 久久精品一区二区| 久久精品亚洲一区| 亚洲韩国青草视频| 亚洲国产精品传媒在线观看| 欧美大片18| 99视频精品在线| 欧美激情精品久久久久久| 免费观看日韩| 樱花yy私人影院亚洲| 久久成人18免费网站| 欧美影视一区| 亚洲国产成人av好男人在线观看| 亚洲第一区在线观看| 欧美精品色综合| 亚洲国产一区在线| 亚洲精品网址在线观看| 美日韩精品免费观看视频| 日韩一级在线| 亚洲日本视频| 欧美性事在线| 久久国产欧美精品| 久久久天天操| 99亚洲一区二区| 亚洲天堂成人在线观看| 国产一本一道久久香蕉| 另类图片国产| 欧美日韩久久精品| 欧美与欧洲交xxxx免费观看| 久久久999| 亚洲少妇一区| 欧美与欧洲交xxxx免费观看 | 黄色亚洲大片免费在线观看| 欧美国产日韩亚洲一区| 欧美日韩高清在线观看| 久久九九国产精品| 欧美α欧美αv大片| 午夜精品影院| 久久综合久久综合久久综合| 亚洲无亚洲人成网站77777 | 亚洲一二三区视频在线观看| 欧美一区二区三区四区在线观看| 91久久在线播放| 亚洲综合精品自拍| 亚洲茄子视频| 午夜久久影院| 激情欧美日韩一区| 日韩午夜激情av| 极品日韩av| 中国av一区| 亚洲精品欧美精品| 欧美一区1区三区3区公司| a4yy欧美一区二区三区| 久久国产精品一区二区三区| 99热在这里有精品免费| 欧美在线视频观看免费网站| 99re6这里只有精品| 久久精品成人一区二区三区蜜臀| 亚洲欧洲在线免费| 久久精品国产亚洲一区二区三区 | 亚洲综合色视频| 亚洲精品久久久蜜桃| 久久国产精彩视频| 亚洲欧美第一页| 欧美资源在线观看| 亚洲欧美日本国产有色| 嫩草成人www欧美| 久久久国产精品一区| 欧美性做爰猛烈叫床潮| 亚洲精品五月天|