樹狀陣列模版

2022-03-11 06:52:54 字數 1383 閱讀 5799

原來聽到樹狀陣列這名字感覺很難,很高大上。學了一下發現不難。而且很好。

普通的陣列修改某個值耗費為o(1),輸出和為o(n);而樹狀陣列為o(logn);

lowbit(x)

返回的是x二進位制最後一位1的位置;

有公式:cn=a(n-a^k+1)+.........+an(其中 k 為 n 的二進位制表示中從右往左數的 0 的個數)。

模版

1 #include2 #include

3int a[1000

],n;

4int lowbit(intx)5

8void update(int i,int

val)915

}16int sum(int

i)17

24return

sum;25}

26int

main()

2737

for(i=1;i<=n;i++)

38 printf("

%d "

,a[i]);

39 printf("\n"

);40

int ans=sum(3

);41 printf("

%d\n

",ans);

42//

update(1,3);

43//

ans=sum(3);

44//

printf("%d\n",ans);45}

46 }

view code

hdu1166入門

1

//hdu1166入門

2 #include3 #include

4int c[50005],n,a[50005];5

char s[100];6

int lowbit(intx)7

10void add(int i,int

val)

1118}19

void sub(int i,int

val)

2027}28

int sum(int

i)29

36return

sum;37}

38int

main()

3952 printf("

case %d:\n

",++ff);

53while(1)54

62else

if(s[0]=='q'

)6370else

if(s[0]=='s'

)7176else

if(s[0]=='e'

)7780}

81}82 }

view code

樹狀陣列模版

1.一維樹狀陣列 獲得2 k public static int lowbit int i 修改結點 public static void add int i,int value 求和 public static int getsum int i return sum 2.二維樹狀陣列 public...

樹狀陣列模版

單點更新,區間求和 include include using namespace std const intmaxn 1e6 1 inta maxn c maxn intmaxnum 1e6 intlowbit intx intsum intx return res void add intx,i...

樹狀陣列模版

分析一下上面那個圖看能得出什麼規律 據圖可知 c1 a1,c2 a1 a2,c3 a3,c4 a1 a2 a3 a4,c5 a5,c6 a5 a6,c7 a7,c8 a1 a2 a3 a4 a5 a6 a7 a8,c9 a9,c10 a9 a10,c11 a11.c16 a1 a2 a3 a4 a5...