桌子上零散地放著若干個不同顏色的盒子,桌子的後方是一堵牆。如右圖所示。問從桌子前方可以看到多少個盒子?假設人站得足夠遠(輸入時,由底向上,從左到右)。
input
第一行,乙個數m代表桌子長度
第二行,乙個數n代表盒子數量
第3到n+2行,每行兩個數,代表盒子的寬度
output
乙個數,可以看到的盒子數。
sample input
16 //桌子長度
5 // 盒子數量
4 712 14
1 56 10
11 16
sample output4
線段樹(這裡懶得初始化建線段樹什麼的,居然跑得快了一點)
#include
int color[
400001
],b[
100001];
//color存某節點的顏色狀態,-1表示這一段有顏色,但不全覆蓋
//b存某顏色是否出現。
int n,m,color,ans,q,z;
void
add(
int d,
int left,
int right,
int l,
int r)
if(color[d]
>=0)
int mid =
(left + right)
>>1;
//二分
if(r <= mid)
add(d <<
1, left, mid, l, r)
;//如果都在左子節點那邊
else
if(l >= mid)
add(
(d <<1)
+1, mid, right, l, r)
;//如果在右子節點那邊
else
}void
find
(int d)
else
if(b[color[d]]==
0&& color[d]!=0
)}intread()
return d;
}int
main()
find(1
);//尋找
printf
("%d"
,ans)
;}
線段樹 線段樹練習題二
桌子上零散地放著若干個不同顏色的盒子,桌子的後方是一堵牆。如右圖所示。問從桌子前方可以看到多少個盒子?假設人站得足夠遠 輸入時,由底向上,從左到右 16 桌子長度 5 盒子數量 4 712 14 1 56 10 11 16 1 n 100000,1 m 100000,保證座標範圍為 1,n incl...
線段樹 線段樹練習題一
桌子上零散地放著若干個盒子,桌子的後方是一堵牆。如右圖所示。現在從桌子的前方射來一束平行光,把盒子的影子投射到了牆上。問影子的總寬度是多少?第一行,乙個數m代表桌面寬度 第二行,乙個數n代表盒子數量 第2到n 2行,每行兩個數代表盒子開始與結束的位置 output 乙個數,影子的總寬度 sample...
線段樹 線段樹練習題三
題解。啊好煩懶得看,於是就拿線段樹練習題二改了。給定一條長度為m的線段,有n個操作,每個操作有3個數字x,y,z表示把區間 x,y 染成顏色z,詢問染完色之後,這條長度為m的線段一共有幾種顏色。規定 線段的顏色可以相同。連續的相同顏色被視作一段。問x軸被分成多少段。input 第一行,兩個數n,m分...