原題鏈結
考察:樹狀陣列
思路:操作1:讀入 l,r 表示在 l 到 r 之間種上一種樹,每次操作種的樹的種類都不同.
有點像差分,在[l,r]區間內加入同一種樹.但是不能全部加1,最後答案是計數種類數.比較直觀的想法就是在x = l處+1,x = r處-1.但是當詢問[1,r+1]等區間時應該輸出1而不是字首和的0.
將左右端點分開處理,用兩個樹狀陣列,第乙個陣列在x = l處+1,第二個陣列在x = r處+1.當詢問[l,r]結果是求出[1,r]區間第乙個陣列的和,[1,l-1]區間第二個陣列的和,兩個相減.這實際就是括號法.
比較坑的是同一地方可以種很多樹.
#include #include using namespace std;
const int n = 50010;
int n,m,tr[2][n];
int lowbit(int x)
void add(int t,int k,int x)
int ask(int t,int r)
int main()
return 0;
}
校門外的樹
描述 某校大門外長度為 l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是 1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸 0的位置,另一端在 l的位置 數軸上的每個整數點,即0,1,2 l,都種有一棵樹。馬路上有一些區域要用來建地鐵,這些區域用它們在數軸上的起始點和終止點表示。已知任一區域的起...
校門外的樹
某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸0的位置,另一端在l的位置 數軸上的每個整數點,即0,1,2,l,都種有一棵樹。由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表示。已知任一區域的起始點和終止...
校門外的樹
校門外的樹 題目描述 某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸0的位置,另一端在l的位置 數軸上的每個整數點,即0,1,2,l,都種有一棵樹。由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表示。已知...