HDU 1166 敵兵布陣

2021-07-04 05:59:53 字數 1367 閱讀 7625

#include #include using namespace std;

#define lson l, m, rt << 1

#define rson m + 1, r, rt << 1 | 1

const int maxn = 55555;

int sum[maxn<<2];

void pushup(int rt)

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

int m = (l + r) >> 1;

build(lson);

build(rson);

pushup(rt);

}void update(int p, int add, int l, int r, int rt)

int m = (l + r) >> 1;

if(p <= m) update(p, add, lson);

else update(p, add, rson);

pushup(rt);

}int query(int l, int r, int l, int r, int rt)

int m = (l + r) >> 1;

int ret = 0;

if(l <= m) ret += query(l, r, lson);

if(r > m) ret += query(l, r, rson);

return ret;

}int main()

}return 0;

}

題意:
第一行乙個整數t,表示有t組資料。 

每組資料第一行乙個正整數n(n<=50000),表示敵人有n個工兵營地,接下來有n個正整數,第i個正整數ai代表第i個工兵營地里開始時有ai個人(1<=ai<=50)。 

接下來每行有一條命令,命令有4種形式: 

(1) add i j,i和j為正整數,表示第i個營地增加j個人(j不超過30) 

(2)sub i j ,i和j為正整數,表示第i個營地減少j個人(j不超過30); 

(3)query i j ,i和j為正整數,i<=j,表示詢問第i到第j個營地的總人數; 

(4)end 表示結束,這條命令在每組資料最後出現; 

每組資料最多有40000條命令

輸出query。
題解:建線段樹吧..掌握模板 掌握模板..有點難有點難..開始學開始學。 函式pushup更新父節點,函式build建樹,函式pudate單點更新,函式query區間求和。
還有用cin會超時。

hdu 1166 敵兵布陣

這是一道線段樹里最簡單的一類題目了,單點更新型別!include define lson l m rt 1 define rson m 1 r rt 1 1 const int maxx 55555 int sum maxx 2 void pushup int rt void build int l...

hdu 1166 敵兵布陣

線段樹的模版 沒什麼思想 include include include include include include include include include include include include include define ll long long define vi vec...

HDU 1166 敵兵布陣

description lily 特別喜歡養花,但是由於她的花特別多,所以照料這些花就變得不太容易。她把她的花依次排成一行,每盆花都有乙個美觀值。如果lily把某盆花照料的好的話,這盆花的美觀值就會上公升,如果照料的不好的話,這盆花的美觀值就會下降。有時,lily想知道某段連續的花的美觀值之和是多少...