線段樹 線段樹練習題一

2021-09-26 07:35:26 字數 984 閱讀 3375

桌子上零散地放著若干個盒子,桌子的後方是一堵牆。如右圖所示。現在從桌子的前方射來一束平行光, 把盒子的影子投射到了牆上。問影子的總寬度是多少?

第一行,乙個數m代表桌面寬度

第二行,乙個數n代表盒子數量

第2到n+2行,每行兩個數代表盒子開始與結束的位置

output

乙個數,影子的總寬度

sample input

20

41 5

3 87 10

13 19

sample output
15
線段樹模板。

#include

int cz,x,m,n,q,z,b[

1000001];

//b代表某個區間的影子寬度。

void

add(

int d,

int q1,

int z1,

int q2,

int z2)

int mid=

(q1+z1)/2

;//二分

if(q2>=mid)

add(d*2+

1,mid,z1,q2,z2)

;//如果在q1-z1的右節點那邊

else

if(z2<=mid)

add(d*

2,q1,mid,q2,z2)

;//左節點

else

b[d]

=b[d*2]

+b[d*2+

1];//重置一下

}int

main()

printf

("%d"

,b[1])

;}

線段樹 線段樹練習題二

桌子上零散地放著若干個不同顏色的盒子,桌子的後方是一堵牆。如右圖所示。問從桌子前方可以看到多少個盒子?假設人站得足夠遠 輸入時,由底向上,從左到右 input 第一行,乙個數m代表桌子長度 第二行,乙個數n代表盒子數量 第3到n 2行,每行兩個數,代表盒子的寬度 output 乙個數,可以看到的盒子...

線段樹 線段樹練習題三

題解。啊好煩懶得看,於是就拿線段樹練習題二改了。給定一條長度為m的線段,有n個操作,每個操作有3個數字x,y,z表示把區間 x,y 染成顏色z,詢問染完色之後,這條長度為m的線段一共有幾種顏色。規定 線段的顏色可以相同。連續的相同顏色被視作一段。問x軸被分成多少段。input 第一行,兩個數n,m分...

線段樹 線段樹練習題二

桌子上零散地放著若干個不同顏色的盒子,桌子的後方是一堵牆。如右圖所示。問從桌子前方可以看到多少個盒子?假設人站得足夠遠 輸入時,由底向上,從左到右 16 桌子長度 5 盒子數量 4 712 14 1 56 10 11 16 1 n 100000,1 m 100000,保證座標範圍為 1,n incl...