校門外的樹(3)

2022-05-06 16:33:14 字數 1258 閱讀 6035

校門外有很多樹,有蘋果樹,香蕉樹,有會扔石頭的,有可以吃掉補充體力的……

如今學校決定在某個時刻在某一段種上一種樹,保證任一時刻不會出現兩段相同種類的樹,現有兩個操作:

k=1,讀入l,r表示在l~r之間種上的一種樹

k=2,讀入l,r表示詢問l~r之間能見到多少種樹

(l,r>0)

這道題暴力線段樹無法維護,因為每個時刻只有一種樹,所以想到直接管樹的種類即可。其實對於乙個區間查詢(x, y),它的值就是樹的總種類減去(1,x-1)的樹的種類再減去(y+1,n)的樹的種類。兩顆線段樹暴力維護即可。

1 #include 2

using

namespace

std;

3#define debug45

#ifdef debug

6const

int maxn=55, maxm=55;7

#else

8const

int maxn=50005, maxm=50005;9

#endif

1011

intn, m, flag;

12int segl[maxn*4], segr[maxn*4

];13

int makl[maxn*4], makr[maxn*4

];14

15void swap(int &x, int &y)

2021

void pushdown(int

x)29

30void add(int pos, int l, int r, int l, int

r)38

pushdown(pos);

39int mid=(l+r)>>1

;40 add(pos<<1

, l, mid, l, r);

41 add(pos<<1|1, mid+1

, r, l, r);

42if (flag==1) segl[pos]=segl[pos<<1]+segl[pos<<1|1

];43

else segr[pos]=segr[pos<<1]+segr[pos<<1|1

];44}45

46int query(int pos, int l, int r, int

pos)

5455

intmain()

68else75}

76return0;

77 }

校門外的樹

描述 某校大門外長度為 l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是 1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸 0的位置,另一端在 l的位置 數軸上的每個整數點,即0,1,2 l,都種有一棵樹。馬路上有一些區域要用來建地鐵,這些區域用它們在數軸上的起始點和終止點表示。已知任一區域的起...

校門外的樹

某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸0的位置,另一端在l的位置 數軸上的每個整數點,即0,1,2,l,都種有一棵樹。由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表示。已知任一區域的起始點和終止...

校門外的樹

校門外的樹 題目描述 某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸0的位置,另一端在l的位置 數軸上的每個整數點,即0,1,2,l,都種有一棵樹。由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表示。已知...