POJ2528線段樹段更新逆序異或(廣告牌)

2021-07-03 02:39:05 字數 1339 閱讀 2256

題意:

可以這樣理解,有一條直線,然後用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...