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

隨筆 - 97, 文章 - 22, 評論 - 81, 引用 - 0
數據加載中……

HDU 3458 Rectangles Too!

題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=3458

/*
題意:
    給定n(1<= n <= 100000)個矩形,問最長的遞增矩形序列。矩形A和B
A = ((xA1 , yA1 ), (xA2 ,yA2 )) 和 B = ((xB1 , yB1 ), (xB2 , yB2 )), 
如果xA2 < xB1 and yA2 < yB1 則 A <= B,問最長L1 <= L2  <= Ln的長度。

解法:
二維線段樹

思路:
    首先將矩形按左下角x坐標排序,相同的按y坐標排序,接下來就是對于矩形
A,能否在(xA1 - 1, yA1 - 1)到負無窮之間找到一個先前矩形序列的最大值,如
果能就將當前矩形接在其后形成新的最大值,這里涉及到了兩個操作,一個是詢問
,然后是插入,詢問的是二維區間的最大值,插入的時候是在二維區間的點操作,
所以很容易想到用二維線段樹來維護每次操作,這題需要注意的是點比較離散,而
且詢問不是隨意的給出的,而且一開始二維空間是沒有值的,所以不需要預先建樹
,事實證明,預先建樹會耗費很大的時間,完全是不必要的。先來談談插入操作,
我們沒有預先建樹,所以根結點一開始的下標定為-1,這樣在插入的時候如果發現
根結點的下標為-1,就生成一個新的結點(只需要將計數器賦值給根結點的編號即
可),然后將根結點的四個兒子全部標記為-1,表示并沒有創建兒子,遞歸四個兒
子,做同樣的操作,直到只剩一個點的時候。然后是詢問,詢問時如果詢問區間和
訪問到的結點區間沒有交集自然是直接返回,還有一個剪枝,就是如果當前結點還
未生成(標記值為-1)說明之前并沒有在以它為根結點的子樹中插入值,也直接返
回。最后一種情況是當前結點為根的子樹的最大值已經小于等于當前的最大值,也
直接返回即可。
    二維線段樹的思想類似ZJU 2859 Matrix Searching,只不過一個求的是最大值
,一個是最小值。
*/


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

#define maxn 100010*4

struct Tree {
    
int Max;
    
int son[4];
    
void clear() {
        
int i;
        
for(i = 0; i < 4; i++)
            son[i] 
= -1;
        Max 
= 0;
    }

}
T[4*maxn];
int Tree_Id;

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

}
;
vector 
< Rectangle > Rec;

bool cmp(Rectangle a, Rectangle b) {
    
return a.x0 < b.x0 || (a.x0 == b.x0 && a.y0 < b.y0);
}


int Max(int a, int b) {
    
return a > b ? a : b;
}

int Min(int a, int b) {
    
return a < b ? a : b;
}


void Query(int root, int sx, int ex, int sy, int ey, int x0, int x1, int y0, int y1, int& Max) {
    
if(sx > x1 || ex < x0 || sy > y1 || ey < y0 || root == -1 || T[root].Max <= Max)
        
return ;

    
if(sx <= x0 && x1 <= ex && sy <= y0 && y1 <= ey) {
        
if(T[root].Max > Max)
            Max 
= T[root].Max;
        
return ;
    }


    
int lmidx = (x0 + x1) >> 1;
    
int lmidy = (y0 + y1) >> 1;
    
int rmidx = (lmidx < x1) ? lmidx+1 : lmidx;
    
int rmidy = (lmidy < y1) ? lmidy+1 : lmidy;

    Query(T[root].son[
0], sx, ex, sy, ey, x0, lmidx, y0, lmidy, Max);
    Query(T[root].son[
1], sx, ex, sy, ey, x0, lmidx, rmidy, y1, Max);
    Query(T[root].son[
2], sx, ex, sy, ey, rmidx, x1, y0, lmidy, Max);
    Query(T[root].son[
3], sx, ex, sy, ey, rmidx, x1, rmidy, y1, Max);
}


void Insert(int& root, int x, int y, int x0, int x1, int y0, int y1, int val) {
    
if(x < x0 || x > x1 || y < y0 || y > y1)
        
return ;

    
if(root == -1{
        root 
= Tree_Id++;
        T[root].clear();
    }

    
if(val > T[root].Max)
        T[root].Max 
= val;

    
if(x0 == x && x == x1 && y0 == y && y == y1) {
        
return ;
    }

    
    
int lmidx = (x0 + x1) >> 1;
    
int lmidy = (y0 + y1) >> 1;
    
int rmidx = (lmidx < x1) ? lmidx+1 : lmidx;
    
int rmidy = (lmidy < y1) ? lmidy+1 : lmidy;
    
    Insert(T[root].son[
0], x, y, x0, lmidx, y0, lmidy, val);
    Insert(T[root].son[
1], x, y, x0, lmidx, rmidy, y1, val);
    Insert(T[root].son[
2], x, y, rmidx, x1, y0, lmidy, val);
    Insert(T[root].son[
3], x, y, rmidx, x1, rmidy, y1, val);
}

int n;
int main() {
    
int i;
    
int MaxX, MaxY, MinX, MinY;
    
while(scanf("%d"&n) != EOF && n) {
        Rec.clear();
        MaxX 
= MaxY = INT_MIN;
        MinX 
= MinY = INT_MAX;

        
for(i = 0; i < n; i++{
            
int x0, x1, y0, y1;
            scanf(
"%d %d %d %d"&x0, &y0, &x1, &y1);
            Rec.push_back(Rectangle(x0, x1, y0, y1));
            MinX 
= Min(x0, MinX); MinY = Min(y0, MinY);
            MaxX 
= Max(x1, MaxX); MaxY = Max(y1, MaxY);
        }

        MinX 
-= 2; MinY -= 2; MaxX += 2; MaxY += 2;
        sort(Rec.begin(), Rec.end(), cmp);
        Tree_Id 
= 0;
        
int ans = 1;
        
int root = -1;
        
for(i = 0; i < Rec.size(); i++{
            
int Max = 0;
            Query(root, MinX, Rec[i].x0
-1, MinY, Rec[i].y0-1, MinX, MaxX, MinY, MaxY, Max);
            Insert(root, Rec[i].x1, Rec[i].y1, MinX, MaxX, MinY, MaxY, Max 
+ 1);
            
if(Max + 1 > ans)
                ans 
= Max + 1;
        }

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

    
return 0;
}

posted on 2011-03-30 17:05 英雄哪里出來 閱讀(1198) 評論(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>
            夜夜精品视频| 99re视频这里只有精品| 午夜亚洲福利| 亚洲午夜女主播在线直播| 亚洲私人影院| 欧美一区二区三区四区夜夜大片| 亚洲午夜在线观看| 欧美一区二区三区四区高清| 久久男女视频| 欧美精品一区二区蜜臀亚洲| 欧美激情第8页| 欧美三级电影一区| 国产免费成人av| 1000部国产精品成人观看| 最新国产成人av网站网址麻豆 | 国产精品久久久久久久久久久久久| 欧美日韩岛国| 国产日韩一区在线| 亚洲精品乱码久久久久久按摩观| 亚洲深夜福利视频| 久久久久久穴| 亚洲精一区二区三区| 欧美一区二区三区四区高清| 美女主播精品视频一二三四| 国产精品第一区| 亚洲国产精品久久久久秋霞蜜臀| 亚洲愉拍自拍另类高清精品| 久久夜色精品一区| 亚洲图片欧洲图片日韩av| 久久综合色影院| 国产精品国产三级国产专播精品人| 激情成人av| 午夜伦欧美伦电影理论片| 免费人成精品欧美精品| 亚洲手机成人高清视频| 欧美大色视频| 雨宫琴音一区二区在线| 午夜亚洲精品| 日韩一区二区电影网| 老司机成人在线视频| 国户精品久久久久久久久久久不卡| 一本色道久久精品| 亚洲高清在线播放| 亚洲字幕一区二区| 欧美日韩一区二区三区在线看 | 久久久久国产精品午夜一区| 欧美日韩午夜在线视频| 亚洲日本激情| 欧美国产在线观看| 久久综合网色—综合色88| 国际精品欧美精品| 欧美在线free| 亚洲综合二区| 欧美国产亚洲视频| 欧美亚一区二区| 亚洲欧洲一区二区天堂久久| 欧美一区高清| 亚洲女人av| 国产欧美不卡| 久久久精品国产一区二区三区| 中国成人亚色综合网站| 欧美日韩一区二区免费在线观看| 亚洲免费高清视频| 最新日韩在线| 欧美日韩久久久久久| 亚洲视频在线一区观看| 亚洲素人一区二区| 国产欧美精品在线| 久久久久欧美精品| 久久视频这里只有精品| 亚洲国产日韩一区二区| 亚洲大黄网站| 欧美日韩ab片| 先锋资源久久| 久久激情综合| 亚洲激情成人| 一区二区欧美在线| 国产乱子伦一区二区三区国色天香 | 日韩午夜剧场| 国产精品一区二区在线观看不卡 | 国产美女一区| 欧美成人资源| 国产精品家教| 蜜桃av噜噜一区| 欧美日韩亚洲一区二区三区四区 | 久久精品国产精品| 亚洲国产欧美在线人成| 日韩亚洲精品视频| 国产一区二区三区电影在线观看 | 99视频精品免费观看| 亚洲综合精品四区| 亚洲激情第一区| 在线一区二区视频| 在线不卡视频| 亚洲一区二区视频在线观看| 狠狠色狠色综合曰曰| 亚洲美女精品成人在线视频| 国产欧美一级| 日韩写真在线| 在线精品观看| 亚洲欧美中文另类| 亚洲免费观看高清完整版在线观看熊 | 一本大道av伊人久久综合| 欧美人与禽猛交乱配| 欧美一级久久久| 免费欧美高清视频| 久久国产视频网| 欧美另类高清视频在线| 久久久午夜视频| 国产精品国产三级国产专播精品人| 蜜臀va亚洲va欧美va天堂| 国产精品久久久久久五月尺| 欧美黄色网络| 伊人影院久久| 欧美中在线观看| 亚洲欧美制服另类日韩| 蜜臀av性久久久久蜜臀aⅴ| 欧美一区二区三区视频在线| 欧美精品一区二区三区高清aⅴ| 久久亚洲色图| 国产亚洲亚洲| 欧美亚洲一级| 午夜精品国产更新| 欧美日韩一区二区三区高清| 亚洲高清视频一区二区| 欲色影视综合吧| 久久亚洲精品欧美| 免费久久99精品国产| 国产综合久久久久影院| 亚洲一区二区视频在线观看| 国产精品99久久不卡二区| 欧美精品一区二区三区在线播放| 免费久久99精品国产| 影音先锋欧美精品| 久久久久久免费| 噜噜噜噜噜久久久久久91 | 中文精品99久久国产香蕉| 欧美裸体一区二区三区| 亚洲精品一区久久久久久| 夜夜精品视频| 欧美三级乱码| 亚洲小少妇裸体bbw| 性欧美在线看片a免费观看| 国产精品一区二区在线观看| 亚洲影院一区| 国产美女精品| 午夜精品一区二区三区在线| 久久精品成人一区二区三区| 国产亚洲精品高潮| 久久久之久亚州精品露出| 久久久五月天| 亚洲精一区二区三区| 欧美日韩国产综合视频在线观看 | 久久免费视频在线观看| 亚洲国产成人精品女人久久久| 亚洲精品日韩在线观看| 欧美网站在线| 欧美亚洲视频在线看网址| 蜜臀久久99精品久久久久久9| 亚洲美女诱惑| 国产伦精品一区二区三区照片91| 久久精品国产视频| 亚洲区免费影片| 性8sex亚洲区入口| 毛片av中文字幕一区二区| 最新成人av网站| 欧美亚洲三区| 久久这里只精品最新地址| 理论片一区二区在线| 亚洲精品视频免费在线观看| 一区二区三区欧美亚洲| 国产精品资源| 欧美成人免费视频| 亚洲女人小视频在线观看| 美日韩精品免费| 亚洲女人天堂av| 亚洲第一精品在线| 国产精品99一区二区| 美国三级日本三级久久99| 亚洲视频999| 欧美国产日韩在线观看| 欧美亚洲在线播放| 亚洲精品日韩在线观看| 久久福利视频导航| 亚洲免费观看高清在线观看| 久久米奇亚洲| 午夜在线电影亚洲一区| 亚洲另类在线视频| 国内久久精品| 国产精品视频网址| 欧美人在线观看| 麻豆91精品91久久久的内涵| 亚洲视频免费在线| 亚洲精品自在在线观看| 欧美成人在线影院| 免费观看日韩av| 欧美在线不卡| 亚洲欧美日韩一区二区三区在线| 欧美一区不卡| 亚洲午夜精品国产|