HDU1166 敵兵布陣 線段樹

2021-08-20 19:08:52 字數 1126 閱讀 6113

看了一些部落格終於知道線段樹是啥了,然後拿水題試試水。

線段樹其實是一種特殊的二叉樹,每個結點相當於乙個個區間,包含了左邊界和右邊界以及這些區間的和。根據題意可知道需要對資料進行3000次的查詢、新增、消減處理所以必須用線段樹這種資料結構。不然一定會超時。

本來測試用例過了,但還是超時了,十分不解,最後看乙個老兄的題解才知道要把cin換成scanf =_=

orz

#include 

#include

using

namespace

std;

const

int maxn = (5e4 + 1) * 4; // 線段樹的結點至少是葉子的四倍

int cnt;

struct node ;

node tree[maxn];

void build(int l, int r, int k)

int m = (l + r) / 2;

build(l, m, k * 2); //左孩子

build(m + 1, r, k * 2 + 1); //右孩子

tree[k].sum = tree[k * 2].sum + tree[k * 2 + 1].sum; //狀態合併,此結點的sum為兩個孩子的sum之和。

}void add(int i, int j, int k)

int m = (tree[k].l + tree[k].r) / 2;

if (i <= m) add(i, j, k * 2);

else add(i, j, k * 2 + 1);

tree[k].sum = tree[k * 2].sum + tree[k * 2 + 1].sum;

}void query(int i, int j, int k)

int m = (tree[k].l + tree[k].r) / 2;

if (j <= m) query(i, j, k * 2);

else

if (i > m) query(i, j, k * 2 + 1);

else

}int main() }}

return

0;}

HDU 1166 敵兵布陣 線段樹

第一道線段樹的題目,正在學習中 include include include using namespace std define max 55555 int sum max 2 n void pushup int rt void build int l,int r,int rt int mid ...

hdu1166敵兵布陣 線段樹

problem description c國的死對頭a國這段時間正在進行軍事演習,所以c國間諜頭子derek和他手下tidy又開始忙乎了。a國在海岸線沿直線布置了n個工兵營地,derek和tidy的任務就是要監視這些工兵營地的活動情況。由於採取了某種先進的監測手段,所以每個工兵營地的人數c國都掌握的...

A 敵兵布陣 線段樹 hdu 1166

a 敵兵布陣 time limit 1000ms memory limit 32768kb 64bit io format i64d i64u submit status practice hdu 1166 description c國的死對頭a國這段時間正在進行軍事演習,所以c國間諜頭子derek...