校門外有很多樹 線段覆蓋問題

2021-08-03 19:56:01 字數 1102 閱讀 6732

問題描述

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

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

k=1,讀入l,r表示在l~r之間種上的一種樹 k=2,讀入l,r表示詢問l~r之間能見到多少種樹(1<=l<=r<=n)

輸入格式

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

輸出格式

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

樣例輸入

5 4

1 1 3

1 2 4

2 3 5

樣例輸出

1

2

提示

20%的資料保證,n,m<=100 60%的資料保證,n <=1000,m<=50000 100%的資料保證,n,m<=50000

然而這道題還是很水。我們可以用樹狀陣列解決問題。

詢問l到r區間內的線段數目s,顯然滿足:s=起點在[1,r]內的線段總數-終點在[1,l-1]的線段總數。

因此用樹狀陣列維護兩個陣列即可。

#include

int c[2][50005],n,m;

int getsum(int

x,int k)

void modify(int

x,int k)

int main()

}

線段樹當然也可以,但顯然優選樹狀陣列。也有用線段樹維護區間重複部分的演算法,由於不夠優秀,這裡不再討論。

NKOI 1317 校門外有很多樹

校門外有很多樹 time limit 10000ms memory limit 65536k total submit 96 accepted 73 case time limit 1000ms description 校門外有很多樹,有蘋果樹,香蕉樹,有會扔石頭的,有可以吃掉補充體力的 如今學校決...

P1047校門外的樹(線段樹初實踐)

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

藍橋杯 演算法訓練 校門外的樹(線段樹 懶惰標記)

演算法訓練 校門外的樹 時間限制 1.0s 記憶體限制 256.0mb 問題描述 某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸0的位置,另一端在l的位置 數 軸上的每個整數點,即0,1,2,l,都種有一棵樹。由於馬路上有一些區域...