SSL 2646 線段樹練習題三

2021-10-13 19:13:41 字數 1502 閱讀 4237

ssl_2646 線段樹練習題三

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

若乙個區間有多個顏色,則標記為-1,否則標記為具體顏色;

新新增的顏色會覆蓋舊的顏色;

判斷兩段顏色是否為同一顏色需要判斷左段的右端點和右端的左端點是否為同一顏色;

&符號有妙用;

#include

#include

using

namespace std;

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

1000001

],lc,rc;

void

insert

(int x,

int l,

int r,

int a,

int b,

int c)

//c:顏色

if(b<=mid)

//區間[a,b)在區間[l,r)左側

insert

(x*2

,l,mid,a,b,c)

;else

if(a>=mid)

//區間[a,b)在區間[l,r)右側

insert

(x*2+1

,mid,r,a,b,c)

;else

//區間[a,b)在區間[l,r)內部 }}

intcou

(int x,

int l,

int r,

int&lc,

int&rc)

//「&」符號:當lc、rc改變時,呼叫函式時使用的變數隨之改變

if(l==r)

//葉子結點

return1;

s=cou

(x*2

,l,mid,lc,lt)

+cou

(x*2+1

,mid,r,rt,rc);if

(lt==rt)

//[lt,mid)與[mid,rt)是同乙個顏色

s--;//總的線段數目-1

return s;

}int

main()

ans=

cou(1,

1,n,t[1]

,t[1])

;//統計

printf

("%d"

,ans)

;return0;

}

ssl2646 線段樹練習題3 線段樹變式

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

SSL ZYC 2646 線段樹練習題三

題目大意 給定一條長度為m的線段,有n個操作,每個操作有3個數字x,y,z表示把區間 x,y 染成顏色z。規定 線段的顏色可以相同。連續的相同顏色被視作一段。問x軸被分成多少段。思路 這道題與 線段樹練習二 極其相似,唯一的區別在於count函式需要判斷兩根相交的線是否為同乙個顏色。include ...

SSL P2646 線段樹練習題三

給定一條長度為m的線段,有n個操作,每個操作有3個數字x,y,z表示把區間 x,y 染成顏色z,詢問染完色之後,這條長度為m的線段一共有幾種顏色。規定 線段的顏色可以相同。連續的相同顏色被視作一段。問x軸被分成多少段。資料規模 n 10000 m 1000000 這道題 算了,多好看 include...