hihoCoder1079 線段樹 離散化

2021-08-04 04:01:00 字數 1979 閱讀 6732

線段樹+離散化

時間限制:

10000ms

單點時限:

1000ms

記憶體限制:

256mb

描述小hi和小ho在回國之後,重新過起了朝7晚5的學生生活,當然了,他們還是在一直學習著各種演算法~

這天小hi和小ho所在的學校舉辦社團文化節,各大社團都在宣傳欄上貼起了海報,但是貼來貼去,有些海報就會被其他社團的海報所遮擋住。看到這個場景,小hi便產生了這樣的乙個疑問——最後到底能有幾張海報還能被看見呢?

於是小ho肩負起了解決這個問題的責任:因為宣傳欄和海報的高度都是一樣的,所以宣傳欄可以被視作長度為l的一段區間,且有n張海報按照順序依次貼在了宣傳欄上,其中第i張海報貼住的範圍可以用一段區間[a_i, b_i]表示,其中a_i, b_i均為屬於[0, l]的整數,而一張海報能被看到當且僅當存在長度大於0的一部分沒有被後來貼的海報所遮擋住。那麼問題就來了:究竟有幾張海報能被看到呢?

提示一:正確的認識資訊量

提示二:小hi大講堂之線段樹的節點意義

輸入每個測試點(輸入檔案)有且僅有一組測試資料。

每組測試資料的第1行為兩個整數n和l,分別表示總共貼上的海報數量和宣傳欄的寬度。

每組測試資料的第2-n+1行,按照貼上去的先後順序,每行描述一張海報,其中第i+1行為兩個整數a_i, b_i,表示第i張海報所貼的區間為[a_i, b_i]。

對於100%的資料,滿足n<=10^5,l<=10^9,0<=a_i輸出

對於每組測試資料,輸出乙個整數ans,表示總共有多少張海報能被看到。

樣例輸入

5 10

4 10

0 21 6

5 93 4

樣例輸出

5

#include #include #include #include #include using namespace std;

const int ax = 1e5+666;

int n,ll;

int s[ax<<4];

int x[ax<<2];

int y[ax<<2];

int float[ax*3];

setv;

void pushdown(int rt)

}int binary_search(int key,int n,int x)

return 1;

}void update_tree(int l,int r,int val,int l,int r,int rt)

pushdown(rt);

int m = (l + r) >> 1;

if(l <= m) update_tree(l,r,val,l,m,rt<<1);

if(r > m ) update_tree(l,r,val,m+1,r,rt<<1|1);

}void query(int l,int r,int rt)

if(l == r) return;

pushdown(rt);

int m = (l + r) >> 1;

query(l,m,rt<<1);

query(m+1,r,rt<<1|1);

}int main()

sort(float,float+m);

memset(s,-1,sizeof(s));

int l,r;

for(int i = 0 ;i < n ; i++){ //discretization

/*l = lower_bound(float,float+m,x[i])-float+1;

r = lower_bound(float,float+m,y[i])-float;*/

l = binary_search(x[i],m,float)+1; //一定要+1,因為查詢到的序列是從0開始的,因為這個wa的好久不知道怎麼回事

r = binary_search(y[i],m,float);

//cout<

hihoCoder 1079(線段樹 離散化)

題目大意 給n個區間,有的區間可能覆蓋掉其他區間,問沒有完全被其他區間覆蓋的區間有幾個?區間依次給出,如果有兩個區間完全一樣,則視為後面的覆蓋前面的。題目分析 區間可能很長,所以要將其離散化。但離散化之後區間就變成了連續的,不再是離散的。也就是葉子由左右端點為u u變成了左右端點為u 1 u,左右兒...

hiho 1079 離散化 線段樹

給定乙個區間0 l,以及n條線段 li,ri 這n條線段按照輸入順序覆蓋到0 l區間。0問最後有幾條線段沒有被完全覆蓋?算是線段樹的另一種使用,雖然標題是離散化,但其實是連續區間下使用線段樹。中間還有一些小問題要處理,就是線段樹的邊界問題。離散情況下,線段樹每乙個節點都代表乙個個體 連續情況下,每乙...

hihoCoder 1116 計算 線段樹

題意 描述現在有乙個有n個元素的陣列a1,a2,an。記f i,j ai ai 1 aj。初始時,a1 a2 an 0,每次我會修改乙個ai的值,你需要實時反饋給我 f i,j 1 i j n 的值 mod 10007。輸入第一行包含兩個數n 1 n 100000 和q 1 q 500000 接下來...