線段樹練習題三

2021-10-08 09:12:52 字數 1703 閱讀 3261

time limit:10000ms memory limit:65536k

total submit:143 accepted:45

case time limit:1000ms

description

給定一條長度為m

mm的線段,有n

nn個操作,每個操作有3

33個數字x,y

,z

x,y,z

x,y,

z表示把區間[x,

y]

[x,y]

[x,y

]染成顏色z

zz,詢問染完色之後,這條長度為m

mm的線段一共有幾種顏色。規定:線段的顏色可以相同。連續的相同顏色被視作一段。問x

xx軸被分成多少段。

input

output

sample input

4 20 //四條,總長度為20

2020

10 19 1

2 9 2

5 13 3

15 17 4

sample output

7hint

資料規模

n

<

=10000

n <= 10000

n<=1

0000

m

<

=1000000

m <= 1000000

m<=1

0000

00解題思路

又是模板題,查詢時用乙個變數ans

ansan

s來記錄上一段貢獻答案的是什麼顏色,如果和當前節點的顏色一樣就不貢獻答案,不一樣就貢獻111。

**

#include

#include

#include

#include

using namespace std;

int n,m,x,y,z,ans,c[

4000010];

void

insert

(int dep,int l,int r,int x,int y,int color)

if(c[dep]

>=0)

int mid=

(l+r)/2

;if(y<=mid)

insert(2

*dep,l,mid,x,y,color)

;else

if(x>=mid)

insert(2

*dep+

1,mid,r,x,y,color)

;else

}int find

(int dep,int l,int r)

return

find

(dep*

2,l,mid)

+find

(dep*2+

1,mid,r);}

int main()

ans=-1

;printf

("%d"

,find(1

,1,m))

;}

線段樹 線段樹練習題三

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

線段樹練習題三 線段樹

description 給定一條長度為m的線段,有n個操作,每個操作有3個數字x,y,z表示把區間 x,y 染成顏色z,詢問染完色之後,這條長度為m的線段一共有幾種顏色。規定 線段的顏色可以相同。連續的相同顏色被視作一段。問x軸被分成多少段。第一行輸入兩個整數n,m,表示有n個操作,長度為m的線段 ...

線段樹練習題三(線段樹)

description 給定一條長度為m的線段,有n個操作,每個操作有3個數字x,y,z表示把區間 x,y 染成顏色z,詢問染完色之後,這條長度為m的線段一共有幾種顏色。規定 線段的顏色可以相同。連續的相同顏色被視作一段。問x軸被分成多少段。4 20 四條,總長度為20 10 19 1 2 9 2 ...