poj 2528 區間改動 離散化

2021-09-07 13:17:58 字數 1300 閱讀 3498

題意:有乙個黑板上貼海報。給出每乙個海報在黑板上的覆蓋區間為l r,問最後多少個海報是可見的。

題解:由於l r取值到1e7,肯定是要離散化的,但普通的離散化會出問題。比方[1,10],[1,4],[6,10]普通得到答案是2,但事實上是3。改進的離散化方法假設兩個數字相差大於1,就在中間補乙個數字。

#include 

#include

#include

#include

using

namespace

std;

const

int n = 10005;

int n, l[n], r[n], a[n << 3], tree[n << 4], vis[n], res;

void pushdown(int k)

}void modify(int k, int left, int right, int l1, int r1, int x)

pushdown(k);

int mid = (left + right) / 2;

if (mid >= l1)

modify(k * 2, left, mid, l1, r1, x);

if (mid < r1)

modify(k * 2 + 1, mid + 1, right, l1, r1, x);

}void query(int k, int left, int right)

return;

}pushdown(k);

int mid = (left + right) / 2;

query(k * 2, left, mid);

query(k * 2 + 1, mid + 1, right);

}int main()

sort(a + 1, a + 1 + cnt);

cnt = unique(a + 1, a + 1 + cnt) - (a + 1);

int cnt2 = cnt;

for (int i = 2; i <= cnt; i++)

if (a[i] - a[i - 1] > 1)

a[++cnt2] = a[i] - 1;

cnt = cnt2;

sort(a + 1, a + 1 + cnt);

for (int i = 1; i <= n; i++)

res = 0;

query(1, 1, cnt);

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

}return

0;}

poj2528 貼海報 區間樹離散化

利用離散化大大優化速度。離散化 排序,去重,對映。區間樹 判斷區間,上下更新值。include include include include using namespace std int n struct cpost cpost posters 10100 int x 20200 存放所有海報的...

POJ2528 離散化線段樹

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

poj 2528 線段樹 離散化

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