描述
校門外有很多樹,有蘋果樹,香蕉樹,有會扔石頭的,有可以吃掉補充體力的……
如今學校決定在某個時刻在某一段種上一種樹,保證任一時刻不會出現兩段相同種類的樹,現有兩個操作:
k=1,讀入l,r表示在l~r之間種上的一種樹
k=2,讀入l,r表示詢問l~r之間能見到多少種樹
(l,r>0)
輸入格式
第一行n,m表示道路總長為n,共有m個操作
接下來m行為m個操作
輸出格式
對於每個k=2輸出乙個答案
備註範圍:20%的資料保證,n,m<=100
60%的資料保證,n <=1000,m<=50000
100%的資料保證,n,m<=50000
注意:樹是可以重疊的,比如1號位置上可以種多種樹
解析:這題可以這麼做,建立兩棵線段樹,分別維護這個點之前有幾個左括號和這個點之後有幾個右括號,於是就可以做啦。
**:
#include#includeusing
namespace
std;
struct
nodetr[
800001
];int
n,q;
int a[200001
];int
read()
returna;}
void build(int k,int x,int
y)
int mid=(x+y)>>1
; build(k
<<1
,x,mid);
build(k
<<1|1,mid+1
,y);
return;}
void insertl(int now,int x,int
y)
int mid=(l+r)>>1
;
if (x>mid) insertl(now<<1|1
,x,y);
else
if (y<=mid) insertl(now<<1
,x,y);
else
return;}
void insertr(int now,int x,int
y)
int mid=(l+r)>>1
;
if (x>mid) insertr(now<<1|1
,x,y);
else
if (y<=mid) insertr(now<<1
,x,y);
else
return;}
int findl(int k,int
x)int findr(int k,int
x)int
main()
else
if (now==2
)
}return0;
}
線段樹 校門外的樹
題目描述 校門外有很多樹,有蘋果樹,香蕉樹,有會扔石頭的,有可以吃掉補充體力的 如今學校決定在某個時刻在某一段種上一種樹,保證任一時刻不會出現兩段相同種類的樹,現有兩個操作 k 1,k 1,讀入l r表示在區間 l,r 中種上一種樹,每次操作種的樹的種類都不同 k 2,讀入l,r表示詢問l r之間能...
校門外的樹(3)
校門外有很多樹,有蘋果樹,香蕉樹,有會扔石頭的,有可以吃掉補充體力的 如今學校決定在某個時刻在某一段種上一種樹,保證任一時刻不會出現兩段相同種類的樹,現有兩個操作 k 1,讀入l,r表示在l r之間種上的一種樹 k 2,讀入l,r表示詢問l r之間能見到多少種樹 l,r 0 這道題暴力線段樹無法維護...
校門外的樹
描述 某校大門外長度為 l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是 1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸 0的位置,另一端在 l的位置 數軸上的每個整數點,即0,1,2 l,都種有一棵樹。馬路上有一些區域要用來建地鐵,這些區域用它們在數軸上的起始點和終止點表示。已知任一區域的起...