51nod 1559 車和矩形

2022-03-01 18:02:31 字數 2772 閱讀 1696

倘若矩形是受保護的,那麼矩形內每一行至少有乙個車或者每一列至少有乙個車

判斷矩形內每一列都有乙個車:

線段樹中維護x座標這一列車的最大y座標

那麼掃瞄線掃過矩形的上邊界時

如果矩形左右邊界內,車的最大y座標中最小的那個大於等於矩形的下邊界

那麼這個矩形的每一列都有乙個車

將車按y座標從小到大排序,每次掃到一條矩形的上邊界,

將y座標<=這一上邊界的車都加入線段樹,即用車的y座標更新線段樹

即可實現這一過程

判斷矩形每一行都有乙個車同理

#include#include

#include

using

namespace

std;

#define n 100002

struct

carg[n

<<1

];struct

line

e[n<<1

];int mi[n<<2

],tmp;

void read(int &x)

}bool

cmp1(car p,car q)

bool

cmp2(line p,line q)

bool

c***(car p,car q)

bool

cmp4(line p,line q)

bool

cmp5(line p,line q)

void build(int k,int l,int

r)void change(int k,int l,int r,int pos,int

w)

int mid=l+r>>1

;

if(pos<=mid) change(k<<1

,l,mid,pos,w);

else change(k<<1|1,mid+1

,r,pos,w);

mi[k]=min(mi[k<<1],mi[k<<1|1

]);}

void query(int k,int l,int r,int opl,int

opr)

int mid=l+r>>1

;

if(opl<=mid) query(k<<1

,l,mid,opl,opr);

if(opr>mid) query(k<<1|1,mid+1

,r,opl,opr);

}int

main()

intx1,x2,y1,y2;

for(int i=1;i<=q;++i)

int now=1

; sort(g+1,g+k+1

,cmp1);

sort(e+1,e+q+1

,cmp2);

for(int i=1;i<=q;++i)

tmp=1e6;

query(

1,1,n,e[i].li,e[i].ri);

if(tmp>=e[i].di) e[i].ok=true

; }

now=1

; sort(g+1,g+k+1

,c***);

sort(e+1,e+q+1

,cmp4);

build(

1,1,m);

for(int i=1;i<=q;++i)

if(e[i].ok) continue

; tmp=1e6;

query(

1,1,m,e[i].di,e[i].ui);

if(tmp>=e[i].li) e[i].ok=true

; }

sort(e+1,e+q+1

,cmp5);

for(int i=1;i<=q;++i) puts(e[i].ok ? "

yes" : "no"

);}

1.5 秒

131,072.0 kb

160 分

6級題波雷卡普有乙個n×m,大小的棋盤,上面有k個車。他又放了q個矩形在上面。每乙個矩形要受到保護。矩形受到保護的意思是對於該矩形內部所有的格仔能夠被這個矩形內的某個車攻擊到或者被佔據,和矩形外面的車無關,即矩形外面的車不能攻擊到矩形裡面。車的位置是固定的。

樣例解釋:

對於最後乙個矩形,用紅色框框表示的,因為(1,2)不能被某個車攻擊到,所以是no。

收起

單組測試資料。

第一行有4個整數 n, m, k 和q (1≤n,m≤100000, 1≤k,q≤200000),表示棋盤大小,棋盤上車的數目,放置矩形的數目。

棋盤的列是從左到右按照1到n編號,行是從下到上按照1到m編號。

接下來k行每一行有兩個整數x y(1≤x≤n,1≤y≤m),表示車的位置。輸入保證所有車的位置是不一樣的。

接下來q行每一行有四個整數x1 y1 x2 y2(1≤x1≤x2≤n, 1≤y1≤y2≤m)。

表示符合x1≤x≤x2, y1≤y≤y2的格仔在該矩形內。

對於每乙個矩形,如果他是受保護的輸出yes,否則輸出no。
樣例輸入1

4 3 3 3

1 13 2

2 32 3 2 3

2 1 3 3

1 2 2 3

樣例輸出1

yesyes

no

51NOD1559 車和矩形

波雷卡普有乙個n m,大小的棋盤,上面有k個車。他又放了q個矩形在上面。每乙個矩形要受到保護。矩形受到保護的意思是對於該矩形內部所有的格仔能夠被這個矩形內的某個車攻擊到或者被佔據,和矩形外面的車無關,即矩形外面的車不能攻擊到矩形裡面。車的位置是固定的。1 n,m 100000,1 k,q 20000...

51NOD 1102 面積最大的矩形

有乙個正整數的陣列,化為直方圖,求此直方圖包含的最大矩形面積。例如 2,1,5,6,2,3,對應的直方圖如下 面積最大的矩形為5,6組成的寬度為2的矩形,面積為10。input 第1行 1個數n,表示陣列的長度 0 n 50000 第2 n 1行 陣列元素a i 1 a i 10 9 output ...

51nod 1102 面積最大的矩形

1102 面積最大的矩形 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 有乙個正整數的陣列,化為直方圖,求此直方圖包含的最大矩形面積。例如 2,1,5,6,2,3,對應的直方圖如下 面積最大的矩形為5,6組成的寬度為2的矩形,面積為10。input 第1行 1個...