線段樹+離散化
時間限制:
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 104 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 接下來...