利用離散化大大優化速度。
離散化:排序,去重,對映。
區間樹:判斷區間,上下更新值。
#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...