校門外的樹(Vijos P1448)

2022-09-12 23:27:32 字數 1161 閱讀 6797

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

1)k=1,讀入 l,r 表示在 l 到 r 之間種上一種樹,每次操作種的樹的種類都不同;

2)k=2,讀入 l,r 表示詢問 l 到 r 之間有多少種樹。

注意:每個位置都可以重複種樹。

第一行 n,m 表示道路總長為 n,共有 m 個操作;

接下來 m 行為 m 個操作。

對於每個 k=2 輸出乙個答案。

5 4

1 1 3

2 2 5

1 2 4

2 3 5

1

2

【資料範圍與提示】

對於 20% 的資料,1≤n,m≤100;

對於 60% 的資料,1≤n≤10e3 ,1≤m≤5×10e4 ;

對於 100% 的資料,1≤n,m≤5×10e4 ,保證 l,r>0。

用summ維護左端點樹的種類,sumn維護右端點樹的種類,詢問區間[l,r]中的樹的種類的多少就是1-r中左端點樹的種類的多少減去1-(l-1)中右端點樹的種類的多少,即為summ[r]-sumn[l-1]

程式中summ[i]表示的是區間[1,i]中左端點的多少,sumn[i]表示的是區間[1,i]右端點的多少

1.更新左端點的數目:

1 inline void genxinleft(int x,int

val)

6 }

2.更新右端點的數目:

1 inline void genxinright(int x,int

val)

6 }

3.查詢區間[1,x]中左端點的數目:

1 inline int ask1(intx)7

return

anssn;

8 }

4.查詢區間[1,x]中右端點的數目 :

1 inline int ask2(intx)7

return

anssn;

8 }

5.主函式

1

intmain()

9else12}

13return0;

14 }

Vijos1448校門外的樹 題解

vijos1448校門外的樹 題解 描述 校門外有很多樹,有蘋果樹,香蕉樹,有會扔石頭的,有可以吃掉補充體力的 k 1,k 1,讀入l r表示在區間 l,r 中種上一種樹,每次操作種的樹的種類都不同 k 2,讀入l,r表示詢問l r之間能見到多少種樹 l,r 0 輸入格式 第一行n,m表示道路總長為...

vijos P1103校門外的樹

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

Vijos 1448 校門外的樹 樹狀陣列

描述 校門外有很多樹,有蘋果樹,香蕉樹,有會扔石頭的,有可以吃掉補充體力的 如今學校決定在某個時刻在某一段種上一種樹,保證任一時刻不會出現兩段相同種類的樹,現有兩個操作 k 1,k 1,讀入l r表示在區間 l,r 中種上一種樹,每次操作種的樹的種類都不同 k 2,讀入l,r表示詢問l r之間能見到...