HDU 1166 敵兵布陣

2021-08-07 10:40:49 字數 2256 閱讀 4586

題目鏈結:

hdu-1166

題目大意:給n

個數,有詢問有修改,每次詢問某個區間[l

,r]的和,每次修改某個位置的值。

資料範圍:n≤

50000

1≤ai≤50

解題思路

線段樹模板,單點修改,區間求和。

//線段樹--單點修改,區間求和

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

const

int inf = 1

<< 30;

const ll inf = 1ll << 60;

const

int maxn = 5e4;

int t, cas;

int n;

int a[maxn + 5];

struct segtree

tree[4 * maxn + 5];

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

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

build(root << 1, l, mid); //遞迴建樹

build(root << 1 | 1, mid + 1, r);

tree[root].sum = tree[root << 1].sum + tree[root << 1 | 1].sum;

}void update(int root, int pos, int val) //更新操作

int mid = (tree[root].l + tree[root].r) >> 1;

if(pos <= mid)

update(root << 1, pos, val); //更新左兒子

else

update(root << 1 | 1, pos, val); //更新右兒子

tree[root].sum = tree[root << 1].sum + tree[root << 1 | 1].sum;

//更新完畢後更新區間和

}int query(int root, int l, int r) //查詢

int main()

printf("case %d:\n", cas);

build(1, 1, n);

char s[8];

while(scanf("%s", s) )

else

if(s[0] == 's')

else

if(s[0] == 'q')

}memset(tree, 0, sizeof(tree));

}return

0;}

也可以用樹狀陣列做:

#include 

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 1e4;

int t, n;

int t;

int a[5 * maxn + 5];

int c[5 * maxn + 5];

char s[10];

int lowbit(int x)

void add(int x, int val)

}int query(int end)

return sum;

}int main()

printf("case %d:\n", ++t);

while(scanf("%s", s))

else

if(s[0] == 'q')

else

if(s[0] == 's')

}memset(a, 0, sizeof(a));

memset(c, 0, sizeof(c));

}return

0;}

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想知道某段連續的花的美觀值之和是多少...