問題
c: 校門外的樹
時間限制
: 1 sec
記憶體限制
: 128 mb
提交: 17
解決: 12[提交
][狀態
][討論版
][命題人
:quanxing
][edit
] [testdata]
題目描述
校門外有很多樹,如今學校決定在某個時刻在某一段種上一種樹,保證任一時刻不會出現兩段相同種類的樹。
現有兩個操作:
k=1,讀入l、
r表示在區間
[l,r]
中種上一種樹,每次操作種的樹的種類都不同
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
原理:這裡不是記錄點數,要把c陣列改一改,因為記錄的是線段數,需要開2個陣列去維護區間,去記錄端點,用sum尋找r前有幾個字首端點,再用sum去尋找l-1前有幾個字尾端點,減一減就為答案。
**:
#includeusing namespace std;
#define maxn 1000000
int a[maxn], c1[maxn], c2[maxn];
int n, m;
int lowbit(int t)//t轉換為二進位制後,有末尾連續0共k個,返回2^k次方
void add(int x, int y, int *c)//單點修改
}int sum(int x, int *c)//區間求和
return ans;
}int main()
else
}return 0;
}
問題 C 校門外的樹
題目描述 校門外有很多樹,有蘋果樹,香蕉樹,有會扔石頭的,有可以吃掉補充體力的 如今學校決定在某個時刻在某一段種上一種樹,保證任一時刻不會出現兩段相同種類的樹,現有兩個操作 k 1,k 1,讀入l r表示在區間 l,r 中種上一種樹,每次操作種的樹的種類都不同 k 2,讀入l,r表示詢問l r之間能...
校門外的樹
描述 某校大門外長度為 l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是 1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸 0的位置,另一端在 l的位置 數軸上的每個整數點,即0,1,2 l,都種有一棵樹。馬路上有一些區域要用來建地鐵,這些區域用它們在數軸上的起始點和終止點表示。已知任一區域的起...
校門外的樹
某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸0的位置,另一端在l的位置 數軸上的每個整數點,即0,1,2,l,都種有一棵樹。由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表示。已知任一區域的起始點和終止...