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 ...