問題描述
校門外有很多樹,有蘋果樹,香蕉樹,有會扔石頭的,有可以吃掉補充體力的……輸入格式如今學校決定在某個時刻在某一段種上一種樹,保證任一時刻不會出現兩段相同種類的樹,現有兩個操作:
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,都種有一棵樹。由於馬路上有一些區域...