給定一條長度為m的線段,有n個操作,每個操作有3個數字x,y,z表示把區間[x,y]染成顏色z,詢問染完色之後,這條長度為m的線段一共有幾種顏色。規定:線段的顏色可以相同。連續的相同顏色被視作一段。問x軸被分成多少段。
乙個n,乙個l,n行x1,x2,color;
被分成多少段
4
2010191
2925
1331517
4
7
這題用線段樹做
首先,題目問我們的是被分成幾段,而不是有多少種顏色,所以一段顏色會被另一種一分為二,
像這段粉色,被棕色一分為二,然後我們設cover=-1表示這段區間由多種顏色組成,然後cover>=0表示由單一顏色組成,最後只用判斷相鄰的顏色是否相同就好。
#include
using
namespace std;
struct node
tree[
1000001];
int x1,y1,l,n;
void
insert
(int dep,
int l,
int r,
int b,
int e,
int color)
//dep是編號,區間為l~r,查詢b~e,color是顏色
//插入操作
if(e <= mid)
insert
(dep *
2,l,mid,b,e,color)
;else
if(b >= mid)
insert
(dep *2+
1,mid,r,b,e,color)
;else}}
}int
tongji
(int dep,
int l,
int r,
int&x,
int&y)
//統計操作
else
if(r - l >1)
//多種顏色且區間長度》1
return0;
}int
main()
int lc =
0,rc =0;
printf
("%d"
,tongji(1
,1,l,lc,rc));
return0;
}
線段樹練習題二 線段樹
description 桌子上零散地放著若干個不同顏色的盒子,桌子的後方是一堵牆。如右圖所示。問從桌子前方可以看到多少個盒子?假設人站得足夠遠 輸入時,由底向上,從左到右 第一行輸入乙個整數n,表示桌面總寬度 第二行輸入乙個整數m,表示盒子數量 接下來m行,每行輸入兩個數x,y,表示第i個盒子的起始...
線段樹練習題三 線段樹
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 ...