這個破題 我wa 了 我實在找不到我那裡錯了
題意:有乙個牆,往牆上貼報紙,最後問能看到幾張報紙
其實就是很容易的線段樹,不容易的地方在於離散化
離散化要儲存所有需要用到的值,排序後,分別對映到1~n,這樣複雜度就會小很多很多這題的難點在於每個數字其實表示的是乙個單位長度(並且乙個點),這樣普通的離散化會造成許多錯誤(包括我以前的**,這題資料奇弱) 出下面兩個簡單的例子應該能體現普通離散化的缺陷:
1-10 1-4 5-10
1-10 1-4 6-10 為了解決這種缺陷,我們可以在排序後的陣列上加些處理,比如說[1,2,6,10] 如果相鄰數字間距大於1的話,在其中加上任意乙個數字,比如加成[1,2,3,6,7,10],然後再做線段樹就好了.
#include#include#include#includeusing namespace std;
int x[21111<<3];
int tree[21111<<4];
int all;
int mark[21111<<4];
int fun(int key,int l,int r)
if(tree[index]>0)
int mid=(r+l)/2;
if(l<=mid)
if(r>mid) }
int query(int l,int r,int index)
return 0;
} if(tree[index]>0)
int mid=(l+r)/2;
query(l,mid,index*2);
query(mid+1,r,index*2+1);
}int main()
sort(x+1,x+nn);
int m=2;
for(i=2;i0;i--)
sort(x+1,x+m);
m--;
for(i=1;i<=n;i++)
all=0;
// printf("\nn");
query(1,m,1);
printf("%d\n",all);
} return 0;
}
POJ2528 離散化線段樹
將資料離散化在使用線段樹 有一面牆,被等分為1qw份,乙份的寬度為乙個單位寬度。現在往牆上貼n張海報,每張海報的寬度是任意的,但是必定是單位寬度的整數倍,且 1qw。後貼的海報若與先貼的海報有交集,後貼的海報必定會全部或區域性覆蓋先貼的海報。現在給出每張海報所貼的位置 左端位置和右端位置 問張貼完n...
poj 2528 線段樹 離散化
題目連線 題目大意 在一面牆上貼海報,牆很長,後面貼上去的海報要覆蓋掉之前貼上去的海報,現在向牆上逐一的貼海報,問到最後牆上可以看見的海報有幾種?方法 線段樹,離散化 include include include include using namespace std define maxn 10...
poj2528(離散化 線段樹)
題意 在1 10 7的長度上貼海報,求能看到的海報數目 解題思路 10 7無論用樸素法或線段樹解都會超時超記憶體,所以要進行離散化。所謂離散化就是把有限的個體對映到有限的空間,以此提高演算法的時空效率以這題的測試資料為例,本題的五個區間為1 4,2 6,8 10,3 4,7 10 其中10和4出現了...