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

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

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坐標(biāo)排序,相同的按y坐標(biāo)排序,接下來就是對于矩形
A,能否在(xA1 - 1, yA1 - 1)到負(fù)無窮之間找到一個先前矩形序列的最大值,如
果能就將當(dāng)前矩形接在其后形成新的最大值,這里涉及到了兩個操作,一個是詢問
,然后是插入,詢問的是二維區(qū)間的最大值,插入的時候是在二維區(qū)間的點操作,
所以很容易想到用二維線段樹來維護每次操作,這題需要注意的是點比較離散,而
且詢問不是隨意的給出的,而且一開始二維空間是沒有值的,所以不需要預(yù)先建樹
,事實證明,預(yù)先建樹會耗費很大的時間,完全是不必要的。先來談?wù)劜迦氩僮鳎?br>我們沒有預(yù)先建樹,所以根結(jié)點一開始的下標(biāo)定為-1,這樣在插入的時候如果發(fā)現(xiàn)
根結(jié)點的下標(biāo)為-1,就生成一個新的結(jié)點(只需要將計數(shù)器賦值給根結(jié)點的編號即
可),然后將根結(jié)點的四個兒子全部標(biāo)記為-1,表示并沒有創(chuàng)建兒子,遞歸四個兒
子,做同樣的操作,直到只剩一個點的時候。然后是詢問,詢問時如果詢問區(qū)間和
訪問到的結(jié)點區(qū)間沒有交集自然是直接返回,還有一個剪枝,就是如果當(dāng)前結(jié)點還
未生成(標(biāo)記值為-1)說明之前并沒有在以它為根結(jié)點的子樹中插入值,也直接返
回。最后一種情況是當(dāng)前結(jié)點為根的子樹的最大值已經(jīng)小于等于當(dāng)前的最大值,也
直接返回即可。
    二維線段樹的思想類似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 英雄哪里出來 閱讀(1201) 評論(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视频精品全国免费| 国产精品久久| 久久精品一二三区| 欧美日韩黄视频| 欧美91福利在线观看| 国产伦精品一区二区三区高清| 欧美a级一区二区| 国产一区二区剧情av在线| 99精品黄色片免费大全| 91久久久久久久久久久久久| 久久国产精品电影| 欧美一区亚洲| 国产精品久久久久久久久借妻 | 久久美女性网| 香蕉成人久久| 国产精品日韩欧美一区二区| 亚洲人久久久| 亚洲精品中文字幕在线观看| 久久综合久色欧美综合狠狠| 麻豆精品国产91久久久久久| 国产一区二区高清不卡| 欧美一级成年大片在线观看| 欧美在线影院在线视频| 国产精品一区二区三区观看| 亚洲一区二区毛片| 欧美一区影院| 国产午夜久久久久| 久久国产免费| 欧美国产精品v| 亚洲激情在线| 欧美精品一区二| 99精品视频免费| 亚洲欧美日韩区| 国产精自产拍久久久久久| 午夜精品久久久久久久久久久久久 | 久久精品九九| 久久婷婷国产综合精品青草| 激情成人综合网| 久久精品日产第一区二区三区| 久久一区视频| 亚洲欧洲日产国产网站| 欧美激情精品久久久六区热门 | 亚洲视频axxx| 欧美尤物一区| 亚洲成色www8888| 欧美大胆成人| 一区二区三区福利| 久久精品综合一区| 亚洲精品1区| 国产精品高清在线观看| 欧美一级夜夜爽| 亚洲成人资源网| 亚洲综合精品四区| 国产一区二区三区在线观看免费 | 嫩草影视亚洲| 9l国产精品久久久久麻豆| 国产精品麻豆va在线播放| 久久国产手机看片| 亚洲三级性片| 久久国产色av| 99在线精品免费视频九九视| 国产精品网站在线观看| 美日韩精品免费观看视频| 一区二区三区日韩精品| 久久一区二区三区四区五区| 一本综合久久| 在线观看一区二区视频| 欧美日韩一区二区在线视频 | 亚洲精品美女在线观看| 国产精品久久久久久久久久ktv| 久久精品国产99精品国产亚洲性色| 亚洲国产成人精品视频| 欧美有码在线视频| 一区二区高清| 在线免费不卡视频| 国产精品人人爽人人做我的可爱 | 久久精品首页| 一区二区三区四区国产| 在线看日韩av| 国产日本欧美一区二区三区在线| 欧美激情亚洲| 久久久人人人| 欧美一区二区啪啪| 亚洲少妇自拍| 亚洲乱码国产乱码精品精| 免费观看欧美在线视频的网站| 午夜久久黄色| 宅男精品导航| 亚洲美女视频在线观看| 在线精品亚洲一区二区| 国产一区二区日韩精品| 国产精品乱人伦中文| 欧美日韩精品在线观看| 欧美国产日本| 欧美福利视频在线| 久久久免费精品| 久久精品国产一区二区三区免费看| 国产精品99久久久久久白浆小说| 亚洲黄色小视频| 欧美激情二区三区| 欧美成人第一页| 免费观看一区| 欧美成人dvd在线视频| 玖玖精品视频| 免费试看一区| 欧美国产亚洲视频| 欧美电影免费观看高清| 欧美岛国在线观看| 亚洲第一精品夜夜躁人人躁| 欧美成人第一页| 欧美大色视频| 亚洲丶国产丶欧美一区二区三区| 欧美国产1区2区| 亚洲国产精品久久久久秋霞影院| 欧美激情一区二区三区四区| 亚洲国产高清高潮精品美女| 亚洲电影第1页| 亚洲经典在线| 99pao成人国产永久免费视频| 日韩一级精品| 亚洲一区精品在线| 欧美一区二区在线免费观看| 久久精品国产精品| 欧美mv日韩mv国产网站app| 欧美va亚洲va日韩∨a综合色| 欧美精品大片| 国产精品xvideos88| 国产精品永久免费观看| 伊人精品成人久久综合软件| 亚洲精品免费在线| 亚洲一区成人| 久久久久久综合| 欧美黑人国产人伦爽爽爽| 亚洲伦理精品| 欧美亚洲一区| 欧美a级大片| 欧美视频日韩视频在线观看| 国产精品私房写真福利视频 | 亚洲视频第一页| 小处雏高清一区二区三区| 久久天堂成人| 亚洲免费观看视频| 欧美中日韩免费视频| 欧美国产日韩二区| 国产美女一区| 日韩亚洲欧美精品| 午夜一区在线| 亚洲国产高清aⅴ视频| 亚洲制服丝袜在线| 免费观看成人网| 国产精品视频一区二区高潮| 亚洲国产精品久久| 午夜一区二区三区不卡视频| 欧美国产成人精品| 午夜精品久久久久久久蜜桃app | 欧美高清hd18日本| 国产精品永久免费在线| 亚洲精品中文字幕有码专区| 久久成人一区| 亚洲每日更新| 免费久久99精品国产| 国产精品网站一区| 亚洲精品在线免费| 浪潮色综合久久天堂| 一区二区三区视频观看| 欧美阿v一级看视频| 国产一区自拍视频| 午夜精品美女自拍福到在线| 亚洲国产精品久久久久秋霞蜜臀| 欧美亚洲一区在线| 国产精品国产三级国产专播精品人| 亚洲国产精品久久久久| 久久久www成人免费无遮挡大片 | 亚洲欧美另类久久久精品2019| 欧美第一黄网免费网站| 狠狠色丁香久久婷婷综合_中| 亚洲一区免费观看| 亚洲乱码日产精品bd| 欧美多人爱爱视频网站| 激情综合电影网| 久久久99免费视频| 亚洲综合激情| 国产精品免费一区豆花| 中国成人黄色视屏| 亚洲人成在线观看一区二区| 久久综合一区二区三区| 在线观看一区二区精品视频| 久久视频一区二区| 香蕉免费一区二区三区在线观看 | 欧美激情亚洲另类| 亚洲第一页在线| 欧美粗暴jizz性欧美20| 久久亚洲国产精品一区二区| 狠狠色2019综合网| 久久亚洲图片| 免播放器亚洲| 亚洲美女性视频| 99国产麻豆精品| 国产精品福利久久久| 性色一区二区三区|