基礎樹狀陣列

2021-06-22 03:08:32 字數 644 閱讀 2097

la 4329(2023年北京區域賽)

題目分析:首先是乘法原理加法原理計數,對a [i]當做裁判的情況,記c[i]  d[i] 分別表示前面和後面小於它的數的個數,ai當裁判方法數就是 c[i]*(n-i-1-d[i])+d[i]*(i-c[i])了

具體的見《演算法競賽入門經典訓練指南》197頁

樹狀陣列見194-197頁

#include#include#includeusing namespace std;

const int maxn=100001;

int c[maxn];

int a[20001],c[20001],d[20001];

int lowbit(int x) //x在二進位制表示式中最右邊的1所對應的值

int sum(int x) //求字首和

return ret;

}void add(int x,int d) //區間中修改乙個x,使x增加d(有且僅有這些節點對應的長條包含被修改的元素)

}int main()

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

for(int i=n-1;i>=0;i--)

long long ans=0;

for(int i=1;i

樹狀陣列基礎

基本用法 例題與線段樹比較 樹狀陣列的基本操作流程與線段樹很像,故學習起來時是兩者的操作對比起來學的。線段樹學習之單點更新與區間更新 樹狀陣列 binary indexed tree 是一種與線段樹類似的資料結構,又叫二進位制索引樹 spoil alert 跟二進位制有關 主要用於查詢區間和問題,每...

樹狀陣列基礎

樹狀陣列,又稱二進位制索引樹,英文名binary indexed tree。樹狀陣列用來求區間元素和,求一次區間元素和的時間效率為o logn 有些同學會覺得很奇怪。用乙個陣列s i 儲存序列a的前i個元素和,那麼求區間i,j的元素和不就為s j s i 1 那麼時間效率為o 1 豈不是更快?但是,...

樹狀陣列基礎

關於樹狀陣列的講解推薦 演算法競賽入門經典訓練指南 一維版本 洛谷3374 分析 樹狀陣列裸的模板題 1 include2 include3 include4 using namespace std 5const int maxn 500000 10 6 intc maxn 7int n,m 8in...