題意:
可以這樣理解,有一條直線,然後用n條線段去覆蓋,最後問全部都覆蓋完之後還有多少是沒有被完全覆蓋的。
思路:
一開始想的有點偏,想到起點排序,然後..失敗了,原因是忘記了題目輸入的順序就是覆蓋的順序,後來突然想到了逆序,這個題目想到逆序也就差不多了,我們可以逆序處理,然後用異或操作去判斷當前這段是否全部都被覆蓋了,只要異或不是1,那麼就是還有沒覆蓋的,那麼答案++,更新這段,把這段全都覆蓋上。
#include#include#include#define n 20005
#define lson l ,mid ,t << 1
#define rson mid + 1 ,r ,t << 1 | 1
using namespace std;
typedef struct
edge;
edge e[n];
int x[n*4];
int mark[n*4];
int num[n] ,numt[n];
void pushup(int t)
void pushdown(int t)
return ;
}void buidtree()
void update(int l ,int r ,int t ,int a ,int b)
pushdown(t);
int mid = (l + r) >> 1;
if(a <= mid) update(lson ,a ,b);
if(b > mid) update(rson ,a ,b);
pushup(t);
}int query(int l ,int r ,int t ,int a ,int b)
int search2(int n ,int a)
else up = mid - 1;
}return ans;
}int main ()
sort(numt + 1 ,numt + id + 1);
nn = 0;
for(i = 1 ;i <= id ;i ++)
if(i == 1 || numt[i] != numt[i-1])
num[++nn] = numt[i];
buidtree();
for(ans = 0 ,i = n ;i >= 1 ;i --)
printf("%d\n" ,ans);
}return 0;
}
poj 2528 線段樹成段更新 離散化
include include include include include include include include include include include include include include include define iinf 2000000000 define ...
POJ2528 離散化線段樹
將資料離散化在使用線段樹 有一面牆,被等分為1qw份,乙份的寬度為乙個單位寬度。現在往牆上貼n張海報,每張海報的寬度是任意的,但是必定是單位寬度的整數倍,且 1qw。後貼的海報若與先貼的海報有交集,後貼的海報必定會全部或區域性覆蓋先貼的海報。現在給出每張海報所貼的位置 左端位置和右端位置 問張貼完n...
poj 2528 線段樹 離散化
題目連線 題目大意 在一面牆上貼海報,牆很長,後面貼上去的海報要覆蓋掉之前貼上去的海報,現在向牆上逐一的貼海報,問到最後牆上可以看見的海報有幾種?方法 線段樹,離散化 include include include include using namespace std define maxn 10...