hdoj 1166 敵兵布陣

2022-06-05 21:36:11 字數 979 閱讀 5151

暴力超時,這道題可以用線段樹做,因為更新的是單個節點,我們也可以用陣列陣列來做,我將兩種方法的**都給出

陣列陣列最適宜的用途就是區間求和和點的更新,但樹狀陣列並不適用於區間的更新問題,也不是做不到,比較麻煩且難理解,有興趣的可以看看這個

//樹狀陣列

#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國都掌握的一清二楚,每個工兵營地的人數都有可能發生...