暴力超時,這道題可以用線段樹做,因為更新的是單個節點,我們也可以用陣列陣列來做,我將兩種方法的**都給出
陣列陣列最適宜的用途就是區間求和和點的更新,但樹狀陣列並不適用於區間的更新問題,也不是做不到,比較麻煩且難理解,有興趣的可以看看這個
//樹狀陣列#includeint n,ans[50005],f[50005];
int lowbit(int n)
void add(int i,int v)
}int query(int n)
return s;
}int main()
for(int l = 1; l <= n; l++)
ans[l] = f[l]-f[l-lowbit(l)];
printf("case %d:\n",j);
while(1)
}return 0;
}
//線段樹解法
#include #include #define maxn 50005
struct node
tree[maxn<<2];
int a[maxn];
void build(int l, int r, int o)
build(l, m, o<<1);
build(m+1, r, (o<<1)+1);
tree[o].sum = tree[o<<1].sum + tree[(o<<1)+1].sum;
}void update(int l, int v, int o)
int query(int l, int r, int o)
{ if (tree[o].l == r && tree[o].r == r)
return tree[o].sum;
if (tree[o].m >= r)
return query(l, r, o<<1);
else if (tree[o].m
HDOJ 1166 敵兵布陣
c國的死對頭a國這段時間正在進行軍事演習,所以c國間諜頭子derek和他手下tidy又開始忙乎了。a國在海岸線沿直線布置了n個工兵營地,derek和tidy的任務就是要監視這些工兵營地的活動情況。由於採取了某種先進的監測手段,所以每個工兵營地的人數c國都掌握的一清二楚,每個工兵營地的人數都有可能發生...
HDOJ 1166 敵兵布陣(樹狀陣列)
problem description c國的死對頭a國這段時間正在進行軍事演習,所以c國間諜頭子derek和他手下tidy又開始忙乎了。a國在海岸線沿直線布置了n個工兵營地,derek和tidy的任務就是要監視這些工兵營地的活動情況。由於採取了某種先進的監測手段,所以每個工兵營地的人數c國都掌握的...
(線段樹)hdoj1166 敵兵布陣
c國的死對頭a國這段時間正在進行軍事演習,所以c國間諜頭子derek和他手下tidy又開始忙乎了。a國在海岸線沿直線布置了n個工兵營地,derek和tidy的任務就是要監視這些工兵營地的活動情況。由於採取了某種先進的監測手段,所以每個工兵營地的人數c國都掌握的一清二楚,每個工兵營地的人數都有可能發生...