HDU2852 樹狀陣列 二分

2021-07-27 02:18:52 字數 717 閱讀 1188

思路:樹狀陣列是用來標記的!值->區間點!

因為這裡值重複是算的,所有樹狀陣列存的是區間上該位置的個數。

0:插入則插入。

1:if(!(sum[x]-sum[x-1])) puts("no...");

2:我們知道a(包括a)之前有多少個數x,求第k大的數,也就是求在樹狀陣列中第x+k大的數。

sum[ans]=x+k。這個可以直接二分查詢。

---哦,還可以線段樹,還是一樣的,值->區間點,點所存的值自己定,這裡也就是個數,差不多。但是這個查詢第k大的數的位置,麻煩了。

#include using namespace std;

typedef long long ll;

typedef pairpii;

const int n=1e5+10;

int c[n],m;

int lowbit(int x)

void add(int x,int val)

}int sum(int x)

return ans;

}int main()

else if(x==1)

else

if(sum(left)>=p)

printf("%d\n",left);

else

puts("not find!");}}

}return 0;

}

hdu 2852 樹狀陣列

在基礎上加了二分查詢 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 re...

hdu 2852 樹狀陣列

擦 這題 絕逼 坑人 一波n折。touch me 我一開始 用了最簡單 最sb的 一維hash陣列 來做 我看時間2000ms最大數才10w 還以為能過的 果斷tle了 然後 就覺得應該用更高效的資料結構來做了 我去問下了下porker 他一開始和我提了下 splay 不會啊 然後 說 樹狀陣列 查...

HDU 2852 樹狀陣列 無序第K小

題目大意 操作 往盒子裡放乙個數。操作 從盒子裡扔掉乙個數。操作 查詢盒子裡大於a的第k小數。解題思路 由於模型是盒子,而不是序列,所以可以用樹狀陣列的順序維護 逆序數思想。對應的樹狀陣列solution add val,1 類似維護逆序數的方法,對應位置上計數 1。注意add的while範圍要寫成...