樹狀陣列 HDU1166

2021-06-21 14:55:14 字數 664 閱讀 2941

繼續上次那題,我們現在採用樹狀陣列來解。樹狀陣列主要用來進行區間求和統計和定點更新操作,樹狀陣列的儲存是如下方式的:假設陣列a為a[1]、a[2]、a[3].......a[n],現在我們另陣列c[1]=a[1], c[2]=a[1]+a[2], c[3]=a[3], c[4]=a[1]+a[2]+a[3]+a[4]......,這是啥結構呢?其實c[i]=a[i-2^n+1]+......+a[i],其中n為 i 所對應的二進位制數末尾0的夠數。很容易得知,這種結構後,區間求和將變為log(n)級別。我們假設乙個數為x,那麼利用x&(-x)可以得出x的2^n的值。於是我們進行節點更新時,可以利用這個技巧進行更新及統計。相關**如下:

#include #includeusing namespace std;

#define maxn 50010

int c[maxn],n;

int lowbit(int x)

void update(int i,int value)

}int sum(int i)

return s;

}int main()

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

i++;

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

}return 0;

}

樹狀陣列 HDU1166

題意為 t組測試陣列,跟著乙個整數n,n n 50000 表示n個營地 n後面跟著n個數ai 1 50 表示每個營地人數。然後輸入三種操作 最多有40000條操作 1.add x y x營地增加y人。2.query x y 查詢x y營地的總人數。3.sub x y x營地減少y人。end 結束。如...

Hdu1166 樹狀陣列

problem description c國的死對頭a國這段時間正在進行軍事演習,所以c國間諜頭子derek和他手下tidy又開始忙乎了。a國在海岸線沿直線布置了n個工兵營地,derek和tidy的任務就是要監視這些工兵營地的活動情況。由於採取了某種先進的監測手段,所以每個工兵營地的人數c國都掌握的...

樹狀陣列 HDU 1166

真是個入門題啊 直接考應用的 注意兩點 1,hdu又卡輸入輸出,老手段了,習慣寫scanf吧 2,減去b其實就是加上 b 要有計算機人的思想 只改了輸入輸出,但是在差不多1e9的資料下面 快了不止一倍啊。離散化啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 不難的啊吧啊啊啊啊啊啊啊啊啊啊...