hdu 1166 敵兵布陣 Dairy

2021-07-11 13:02:20 字數 2388 閱讀 1492

today is 4.30,the second day in 2s.

遇見了乙個十分humorous的把妹老師。嗯南方人。所化四澤陽的。

樹狀陣列。

其神奇所在,大概是lowbit陣列。

由圖可知,c1=a1,c2=a1+a2,c3=a3,c4=a1+a2+a3+a4……

一次類推可知,i是奇數時,ai=ci;i是偶數是(c6=a5+a6),要看i裡含2

的幾次冪的因數。比如c4裡是2的2次冪,所以是a1+a2+a3+a4;c6只含2,所以是a5+a6; 所以我們有有公式:cn=a(n-2^k+1)+………+an(其中 k 為 n 的二進位制表示中從右往左數的 0 的個數)。 eg:6的二進位制是110,那就是6-2^1+1,所以就是a5+a6。

2^k怎麼求呢?

int lowbit(int x)
如上,其實是x&(~(x-1))…..

舉個例子:

6 110

~(5) 010

6&~(5) 010 ==2 !

剩下的簡單的多了,乙個是插入操作,還有乙個修改。

看**好了

#include

#include

#include

#include

using

namespace

std;

#define n 50005

int n;

int a[n],c[n];

int lowbit(int x)

void add(int i,int w)

}int sum(int i)

return sum;

}int main()

while(scanf("%s",op)&& op[0]!='e')

} return

0;

} /*1

101 2 3 4 5 6 7 8 9 10

query 1 3

add 3 6

query 2 7

sub 10 2

add 6 3

query 3 10

end */

第二種方法:

– 線段樹:

沒什麼解釋的?

直接看好了

#include

#include

#include

#include

using namespace std;

struct lineline[200001];

int n,ans,jy,cases=1;

int c[200001];

char op[11];

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

line[num].left=l;

line[num].right=r;

int mid=(l+r)/2;

build(l,mid,2

*num);

build(mid+1,r,2

*num+1);

line[num].val=line[num*2].val+line[num*2+1].val;//更新父親節點

}void modify(int a,int b,int

s,int t,int num)

int mid=(s+t)/2;

if(a<=mid) modify(a,b,s,mid,num*2);

else modify(a,b,mid+1,t,num*2+1);

line[num].val=line[num*2].val+line[num*2+1].val;

}int query(int a,int b,int

s,int t,int num)

int mid=(s+t)/2;

int res=0;

if(a<=mid) res+=query(a,b,s,mid,num*2);

//printf("%d\n",res);

if(b>mid) res+=query(a,b,mid+1,t,num*2+1);

//printf("%d\n",res);

return res;

}int main()

*/int

x,y;

//while(scanf("%s",op) && op[0]!='e')

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

if(op[0] == 'q')}}

}

啦啦啦,拖到現在才寫完,馬上就要上課了。

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