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

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

HDU 1255 覆蓋的面積

題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1255
/*
題意:
    給出N(N <= 1000)個(gè)矩形,求被覆蓋2次以上的矩形面積并。

解法:
離散化+線段樹

思路:
    類似于覆蓋一次的矩形面積并問題,還是用線段樹求解,首先我們
將每個(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)覆蓋一次的y方向長(zhǎng)度yOnce
和當(dāng)前結(jié)點(diǎn)覆蓋多次的y方向長(zhǎng)度yMore。
    其實(shí)和矩形面積并的唯一差別就是在計(jì)算Cover后的Update函數(shù),更
新yOnce和yMore的值,分情況討論:
1. 當(dāng)nCover>1時(shí),yOnce = 0; yMore = 區(qū)間實(shí)際長(zhǎng)度;
2. 當(dāng)nCover=1時(shí),yMore = 兩棵子樹的yOnce+yMore; 
                 yOnce = 區(qū)間實(shí)際長(zhǎng)度 - yMore;
3. 當(dāng)nCover=0時(shí),如果是葉子結(jié)點(diǎn) yOnce = 0; yMore = 0;
                 否則 
                 yOnce = 兩棵子樹的yOnce和;
                 yMore = 兩棵子樹的yMore和;
*/


#include 
<iostream>
#include 
<algorithm>
#include 
<vector>
#include 
<cmath>

using namespace std;

#define maxn 2200


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


struct Tree {
    
int p;
    
int l, r;
    
int nCover;
    
double ylenOnce, ylenMore;

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

        }

    }

}
T[maxn*4];

struct VLine {
    
double x;
    
double y1, y2;
    
int val;
    VLine() 
{}
    VLine(
double _x, double _y1, double _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;
}


void Process() {
    sort(tmp, tmp 
+ tmpsize);
    bin[ size 
= 1 ] = tmp[0];
    
for(int i = 1; i < tmpsize; i++{
        
if(fabs(tmp[i] - tmp[i-1]) > 1e-6)
            bin[ 
++size ] = tmp[i];
    }

}


int Binary(double v) {
    
int l = 1;
    
int r = size;

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

}


void Build(int p, int l, int r) {
    T[p].l 
= l;      T[p].r = r;
    T[p].p 
= p;
    T[p].nCover 
= 0; T[p].ylenOnce = T[p].ylenMore = 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(r <= T[p].l || l >= T[p].r)
        
return ;

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


    Insert(p
<<1, l, r, val);
    Insert(p
<<1|1, l, r, val);
    
    T[p].Update();
}

int n;
int main() {
    
int t;
    
int i;
    scanf(
"%d"&t);
    
while(t--{
        tmpsize 
= 0;
        Vl.clear();
        scanf(
"%d"&n);
        
for(i = 0; i < n; i++{
            
double x0, x1, y0, y1;
            scanf(
"%lf %lf %lf %lf"&x0, &y0, &x1, &y1);
            Vl.push_back(VLine(x0, y0, y1, 
1));
            Vl.push_back(VLine(x1, y0, y1, 
-1));
            tmp[ tmpsize
++ ] = y0;
            tmp[ tmpsize
++ ] = y1;
        }


        sort(Vl.begin(), Vl.end(), cmp);
        Process();
        Build(
11, size);
        
double ans = 0;
        
for(i = 0; i < Vl.size(); i++{
            
if(i) {
                ans 
+= (Vl[i].x - Vl[i-1].x) * T[1].ylenMore;
            }

            
int y1 = Binary(Vl[i].y1);
            
int y2 = Binary(Vl[i].y2);
            
if(y1 < y2)
                Insert(
1, y1, y2, Vl[i].val);
        }

        printf(
"%.2lf\n", ans);
    }

    
return 0;
}


posted on 2011-03-30 19:58 英雄哪里出來 閱讀(2494) 評(píng)論(1)  編輯 收藏 引用 所屬分類: 線段樹

評(píng)論

# re: HDU 1255 覆蓋的面積  回復(fù)  更多評(píng)論   

受益匪淺,想大牛學(xué)習(xí)
2011-03-30 21:25 | 菜菜
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            中日韩男男gay无套| 国产精品亚洲第一区在线暖暖韩国| 日韩视频免费观看高清在线视频 | 国产精品一区一区三区| 久久九九电影| 一区二区电影免费观看| 久久中文欧美| 午夜精品成人在线| 亚洲欧洲日韩在线| 国产综合激情| 国产精品福利网| 久久资源在线| 午夜精品成人在线| 亚洲精品九九| 免费日韩成人| 亚洲一区二区三区777| 亚洲国产另类精品专区| 国产午夜精品麻豆| 欧美私人啪啪vps| 欧美成人精品| 久久久久久一区| 亚洲一区二区三区视频| 亚洲人成网站999久久久综合| 久久综合狠狠综合久久激情| 国产精品永久免费观看| 欧美日韩国产三区| 免费91麻豆精品国产自产在线观看| 亚洲免费在线精品一区| 日韩一区二区精品葵司在线| 欧美成人久久| 免费日韩精品中文字幕视频在线| 欧美一区激情| 亚洲一区二区三区精品视频| 亚洲精品久久久久久久久| 在线播放日韩| 狠狠色丁香婷综合久久| 国产色综合久久| 国产精品视区| 国产精品v一区二区三区| 欧美日韩国产成人| 欧美a级大片| 欧美国产日本在线| 美腿丝袜亚洲色图| 免费短视频成人日韩| 久久人人97超碰人人澡爱香蕉| 性做久久久久久久免费看| 亚洲免费在线视频| 亚洲欧美美女| 亚洲欧美电影在线观看| 亚洲一区二区三区涩| 亚洲少妇一区| 亚洲欧美不卡| 性视频1819p久久| 欧美在线观看一区二区三区| 欧美在线关看| 久久精品99国产精品| 亚洲一区视频在线观看视频| 亚洲一卡久久| 午夜亚洲精品| 久久精彩免费视频| 久久精品亚洲| 欧美成人69| 欧美日本一道本在线视频| 欧美承认网站| 欧美色视频在线| 国产精品区一区二区三区| 国产日韩欧美综合在线| 国产在线成人| 亚洲级视频在线观看免费1级| 亚洲精品中文字幕女同| 亚洲少妇最新在线视频| 99ri日韩精品视频| 亚洲欧美另类在线| 久久久精品国产99久久精品芒果| 久热成人在线视频| 亚洲激情在线观看| 亚洲午夜久久久久久久久电影网| 亚洲欧美日韩一区在线| 久久精品国产91精品亚洲| 免费永久网站黄欧美| 欧美日韩国产高清| 国产日韩欧美综合一区| 亚洲第一福利社区| 亚洲网友自拍| 欧美在线亚洲一区| 久久精品一区蜜桃臀影院 | 欧美不卡视频一区发布| 欧美日韩国产一区| 国产精品萝li| 亚洲国产成人久久综合| 在线一区二区三区四区五区| 久久国产精品黑丝| 亚洲韩日在线| 亚洲欧洲99久久| 老牛影视一区二区三区| 国产精品福利在线观看网址| 黄色精品网站| 亚洲综合日韩在线| 久久久久一区| 一区二区三区免费看| 久久欧美肥婆一二区| 欧美午夜精品久久久久久浪潮| 狠狠久久亚洲欧美专区| 99这里只有精品| 久久久久网站| 一区二区三区精密机械公司| 久久久久久综合| 国产精品人成在线观看免费| 亚洲国产日韩欧美综合久久| 欧美一区二区三区久久精品| 亚洲国产mv| 久久精品免费观看| 国产精品夜色7777狼人| 日韩视频在线一区二区三区| 久久一区中文字幕| 亚洲影院在线| 欧美精品在线免费播放| 狠狠v欧美v日韩v亚洲ⅴ| 午夜精品网站| 亚洲蜜桃精久久久久久久 | 久久免费视频观看| 欧美亚洲成人免费| av成人免费| 亚洲高清成人| 久久久久国色av免费看影院| 国产欧美一区二区色老头| 在线视频一区观看| 亚洲高清不卡一区| 久久久久久久尹人综合网亚洲| 欧美精品v日韩精品v国产精品| 亚洲成在人线av| 另类图片国产| 久久精精品视频| 国产区欧美区日韩区| 欧美在线不卡视频| 欧美综合国产精品久久丁香| 韩国成人精品a∨在线观看| 久久综合九色欧美综合狠狠| 久久久噜噜噜久久中文字幕色伊伊| 激情久久久久久久| 亚洲第一精品夜夜躁人人爽| 欧美激情一区二区三区全黄| 在线亚洲一区观看| 亚洲欧美激情在线视频| 韩国女主播一区| 欧美激情视频网站| 欧美日韩不卡一区| 欧美亚洲一级片| 久久久天天操| 亚洲免费观看视频| 亚洲午夜激情| 黄色亚洲网站| 亚洲激情视频在线| 国产精品久久久久久久浪潮网站 | 国产精品久久久久久久久久三级 | 久久一区二区视频| aⅴ色国产欧美| 亚洲欧美日韩国产精品| 韩国视频理论视频久久| 亚洲激情一区二区| 国产精品免费看久久久香蕉| 久久人人爽人人爽| 欧美日本亚洲韩国国产| 欧美一级日韩一级| 毛片一区二区| 亚洲自拍偷拍网址| 久久夜色撩人精品| 亚洲一区二区三区视频播放| 久久成人在线| 中日韩午夜理伦电影免费| 欧美一区二区在线免费播放| 亚洲裸体俱乐部裸体舞表演av| 亚洲图片欧洲图片日韩av| 在线观看视频一区| 亚洲午夜影视影院在线观看| 精品999久久久| 一本一本久久| 亚洲国产精品视频| 亚洲欧美综合网| 一本不卡影院| 久久精品一二三| 亚洲欧美中文另类| 欧美jizzhd精品欧美巨大免费| 性色av一区二区三区红粉影视| 欧美+日本+国产+在线a∨观看| 欧美一区中文字幕| 欧美日韩在线观看一区二区三区| 老色鬼精品视频在线观看播放| 国产精品国产三级国产aⅴ无密码| 欧美+日本+国产+在线a∨观看| 国产精品视频自拍| 日韩视频一区二区三区在线播放免费观看| 国产综合网站| 亚洲综合欧美| 一本色道久久综合亚洲精品高清 | 国产精品稀缺呦系列在线| 亚洲黄色片网站| 亚洲第一福利在线观看| 午夜在线a亚洲v天堂网2018| 国产精品99久久久久久www|