#include#include#define lowbit(i) ((i)&(-i))
const int maxn=100010;
int c[maxn]; //樹狀陣列
//getsum函式返回前x個整數之和
int getsum(int x)
return sum; //返回和
}//update函式將第x個整數加上v
void update(int x,int v)temp[maxn];
//a是離散化後的原始陣列,c是樹狀陣列
int a[maxn],c[maxn];
//update函式將第x個整數加上v
void update(int x,int v)
return sum; //返回和
} //按val從小到大排序
bool cmp(node a,node b)
return l;
}int main()
//離散化
sort(temp,temp+n,cmp);
for(int i=0;i} //正式進入更新和求和操作
for(int i=0;ireturn 0;
}
樹狀陣列的應用
樹狀陣列的應用1 求逆序數 首先考慮將輸入陣列離散化,因為題目要求輸入的數值可以達到10的9次方,肯定不會開出那麼大的陣列。1.定義乙個結構體 val儲存原值,pos儲存原來在陣列中的位置 2.在對原結構體陣列對val值排序 3.定義儲存離散化資料的陣列flect,flect node i pos ...
樹狀陣列應用
一維樹狀陣列常用的3 個函式 int lowbit int x 取x的最低位1,比如4,則返回4,如5,則返回1 void update int i,int val 將第i個元素增加val int sum int i 求前i項的和 return s 以下陣列下標均預設從1開始 應用一假如給你乙個陣列...
數星星(樹狀陣列的應用)
1265.數星星 天空中有一些星星,這些星星都在不同的位置,每個星星有個座標。如果乙個星星的左下方 包含正左和正下 有 k k k 顆星星,就說這顆星星是 k k k 級的。例如,上圖中星星 5 5 5 是 3 3 3 級的 1,2 4 1,2,4 1,2,4 在它左下 星星 2,4 2,4 2,4...