在基礎上加了二分查詢
#include #include #include using namespace std;
#define m 100005
int n, a[m];
int flage;
int lowbit(int i)
void update(int i, int val)
} int sum(int i)
return sum;
} int find(int y,int z)
{ int l=y+1,r=m-1,mid;
int m=sum(y);
while(l<=r)
{mid=(l+r)>>1;
if(sum(mid)-m注意:
這裡由於不知道最大的輸入數字是多少所以直接建立最大的樹狀陣列,一開始還以為運算元是最大的數建了到n的樹狀陣列.....wa tat.....
hdu 2852 樹狀陣列
擦 這題 絕逼 坑人 一波n折。touch me 我一開始 用了最簡單 最sb的 一維hash陣列 來做 我看時間2000ms最大數才10w 還以為能過的 果斷tle了 然後 就覺得應該用更高效的資料結構來做了 我去問下了下porker 他一開始和我提了下 splay 不會啊 然後 說 樹狀陣列 查...
HDU2852 樹狀陣列 二分
思路 樹狀陣列是用來標記的!值 區間點!因為這裡值重複是算的,所有樹狀陣列存的是區間上該位置的個數。0 插入則插入。1 if sum x sum x 1 puts no.2 我們知道a 包括a 之前有多少個數x,求第k大的數,也就是求在樹狀陣列中第x k大的數。sum ans x k。這個可以直接二...
HDU 2852 樹狀陣列 無序第K小
題目大意 操作 往盒子裡放乙個數。操作 從盒子裡扔掉乙個數。操作 查詢盒子裡大於a的第k小數。解題思路 由於模型是盒子,而不是序列,所以可以用樹狀陣列的順序維護 逆序數思想。對應的樹狀陣列solution add val,1 類似維護逆序數的方法,對應位置上計數 1。注意add的while範圍要寫成...