poj2528 貼海報 區間樹離散化

2021-07-16 05:23:19 字數 1165 閱讀 6121

利用離散化大大優化速度。

離散化:排序,去重,對映。

區間樹:判斷區間,上下更新值。

#include 

#include

#include

#include

using

namespace

std;

int n;

struct cpost

;cpost posters[10100];

int x[20200]; //存放所有海報的端點瓷磚編號

int hashs[10000010]; //hash[i]表示瓷磚i所處的離散化後的區間編號

struct cnode

;cnode tree[1000000];

int nnodecount = 0;

int mid( cnode * proot)

void buildtree( cnode * proot, int l, int r)

bool post( cnode *proot, int l, int r)

bool bresult ;

if( r <= mid(proot) ) bresult = post( proot->pleft,l,r);

else

if( l >= mid(proot) + 1) bresult = post( proot->pright,l,r);

else

if( proot->pleft->bcovered && proot->pright->bcovered ) proot->bcovered = true;

return bresult;

}int main()

sort(x,x+ncount);

ncount = unique(x,x+ncount) - x;

//下面離散化

int nintervalno = 0;

for( i = 0; i < ncount; i ++ )

}buildtree( tree,0,nintervalno );

int nsum = 0;

for( i = n - 1; i >= 0; i -- )

printf("%d\n",nsum);

}return

0;}

POJ2528 海報問題 線段樹 離散化

有一兩年沒有搞了,有點生疏,這道題目是線段樹的,以前在學校搞過,搞這道題目第二天才搞出來,而且參考了另外的解題報告。問題的抽象如下,給定一條數軸,長度為 l 1千萬單位,然後在數軸上的某些區間染色,第i次對區間染色為i,共染色n 10000次。給出每次染色的區間,問最後能看見多少種顏色。線段樹處理染...

POJ2528 離散化線段樹

將資料離散化在使用線段樹 有一面牆,被等分為1qw份,乙份的寬度為乙個單位寬度。現在往牆上貼n張海報,每張海報的寬度是任意的,但是必定是單位寬度的整數倍,且 1qw。後貼的海報若與先貼的海報有交集,後貼的海報必定會全部或區域性覆蓋先貼的海報。現在給出每張海報所貼的位置 左端位置和右端位置 問張貼完n...

poj 2528 線段樹 離散化

題目連線 題目大意 在一面牆上貼海報,牆很長,後面貼上去的海報要覆蓋掉之前貼上去的海報,現在向牆上逐一的貼海報,問到最後牆上可以看見的海報有幾種?方法 線段樹,離散化 include include include include using namespace std define maxn 10...