桌子上零散地放著若干個不同顏色的盒子,桌子的後方是一堵牆。如右圖所示。問從桌子前方可以看到多少個盒子?假設人站得足夠遠(輸入時,由底向上,從左到右)。
16
//桌子長度
5// 盒子數量47
121415
6101116
4
1<=n<=100000,1<=m<=100000,保證座標範圍為[1,n].
可以這樣來看這道題:x軸上有若干條不同線段,將它們依次染上不同的顏色,問最後能看到多少種不同的顏色?(後染的顏色會覆蓋原先的顏色)
我們可以這樣規定:x軸初始是顏色0,第一條線段染顏色1,第二條線段染顏色2,以此類推。
原先構造線段樹的方法不再適用,但是我們可以通過修改線段樹的cover域的定義,使得這道題也能用線段樹來解。
定義cover如下:cover=−1表示該區間由多種顏色組成。cover>=0表示該區間只有一種單一的顏色cover.
#include
#include
#include
#include
typedef
long
long ll;
using
namespace std;
int n,m,l,r,ans,f[
100001
],tree[
300001];
void
insert
(int k,
int l,
int r,
int x,
int y,
int c)
else
if(y<=mid)
else
if(x>=mid)
else}}
}void
cnt(
int k,
int l,
int r)
else
if(l+
1}int
main()
cnt(1,
1,n)
;for
(int i=
1;i<=m;i++)}
cout
}
2645 線段樹練習題二
桌子上零散地放著若干個不同顏色的盒子,桌子的後方是一堵牆。如右圖所示。問從桌子前方可以看到多少個盒子?假設人站得足夠遠 輸入時,由底向上,從左到右 可以把每個盒子看成一種顏色的線段,後塗的線段可以覆蓋前面的,原來的顏色為0,問最後這條直線上有多少種顏色的線段 原先構造線段樹的方法不再適用,但是我們可...
SSL P2645 線段樹練習題二
題目大意 n長度的桌子上零散地放著m個不同顏色的盒子,桌子的後方是一堵牆。給出每個箱子的左端跟右端,問從桌子前方可以看到多少個盒子?假設人站得足夠遠 輸入時,由底向上,從左到右 1 n 100000,1 m 100000,保證座標 l,r 範圍為 1,n 題解 線段樹 跟zju的那道題一樣,不過把記...
SSLGZ 2645 線段樹練習題二
問題描述 桌子上零散地放著若干個不同顏色的盒子,桌子的後方是一堵牆。如右圖所示。問從桌子前方可以看到多少個盒子?假設人站得足夠遠 輸入時,由底向上,從左到右 樣例輸入 16 桌子長度 5 盒子數量 4 7 12 14 1 5 6 10 11 16 樣例輸出 4演算法討論 構建線段樹,我們定義區間標記...