HDU 1166 敵兵布陣 線段樹 單點更新

2022-05-07 06:06:10 字數 1706 閱讀 1183

題意:給出n個數,a1,a2,a3,,,,,an,再給出一些操作

add i  j 表示給第i個節點增加j

sub i  j 表示給第i個節點減少j

query i j 表示詢問第i個節點到第j個節點的和

套的別人的模板寫的---還是要再多自己寫寫的說-------

1 #include2 #include3 #include4 #include 5 #include6 #include7 #include8 #include

9 #include10 #include11

using

namespace

std;

1213 typedef long

long

ll;14

const

int inf = (1

<<30)-1;15

const

int mod=1000000007;16

const

int maxn=1000005;17

18int

a[maxn];

1920

struct

node;

2425 node tree[4*maxn];

2627

int calc(int x,int y)

2829

void build_tree(int i,int l,int

r)36

int mid=(l+r)/2

;37 build_tree(2*i,l,mid);

38 build_tree(2*i+1,mid+1

,r);

39 tree[i].l=l;

40 tree[i].r=r;

41 tree[i].s=calc(tree[2*i].s,tree[2*i+1

].s);42}

4344

void update1(int i,int s,int

w)49

int mid=(tree[i].l + tree[i].r)/2;50

if(s<=mid) update1(2*i,s,w);

51else update1(2*i+1

,s,w);

5253 tree[i].s=calc(tree[2*i].s,tree[2*i+1

].s);54}

5556

void update2(int i,int s,int

w)61

int mid=(tree[i].l + tree[i].r)/2;62

if(s<=mid) update2(2*i,s,w);

63else update2(2*i+1

,s,w);

6465 tree[i].s=calc(tree[2*i].s,tree[2*i+1

].s);66}

6768

int sum(int i,int l,int

r)73

else80}

8182

intmain()

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

)108

if(s[0] == 'q'

)112

}

113}

114return0;

115 }

view code

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...