看到有樹狀陣列的解法就以為是用區間更新區間查詢做的,結果怎麼都想不到怎麼樣來實現樹最多割一次。
看了一下別人的題解,才頓悟:不是題目有區間更新區間查詢就必須維護乙個區間更區間查的樹狀陣列。。
這道題應該用區間更單點查的樹狀陣列。太不靈活了
需要注意的有兩點吧
1,樹狀陣列的最低下標只能是1,不能是0,這道題的區間範圍是從0開始,所以要整體的把區間向後移動一位,把1當0,1當2
2,用差分維護一串相等的值,這串值的取值取決於差分的第一項,可以想象它前面有乙個假想的哨兵0
比如:一串數的差分陣列是 3 0 0 0 0 代表是 3 3 3 3 3 。
1 0 0 0 0代表是1 1 1 1 1
#include #include #define maxn 10002
using namespace std;
int bit[maxn];
int l,m;
int lowbit(int x)
void add(int x, int c)
}int query(int x)
return sum;
}int main()
printf("%d\n",cnt);
return 0;
}
洛谷p1047題解
題目 題目描述 某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸l的位置,另一端在ll的位置 數軸上的每個整數點,即0,1,2,l0,1,2,l,都種有一棵樹。由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點...
洛谷p1047標記陣列
題目描述 某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是11公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸00的位置,另一端在ll的位置 數軸上的每個整數點,即0,1,2,l都種有一棵樹。由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表示。已知任一區域...
洛谷P1047 校門外的樹(陣列,迴圈)
題目描述 某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是11公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸00的位置,另一端在ll的位置 數軸上的每個整數點,即0,1,2,l0,1,2,l,都種有一棵樹。由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表...