模板 線段樹 資料結構 線段樹練習題三

2021-09-26 08:10:44 字數 1300 閱讀 6213

給定一條長度為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 ...