D Multiset(樹狀陣列 二分)

2022-07-23 20:30:23 字數 1100 閱讀 5591

二分 + 樹狀陣列做法

這個時候我們的\(tree\)陣列就相當與乙個桶,每個桶裡統計的是值為其下標的個數,通過樹狀陣列的字首和性質,我們可以通過二分輕鬆的鎖定第\(k\)項的位置,然後進行刪除操作,具體的操作細節看**實現。

權值線段樹做法

線段相較而言,常數大一些,維護的基本思路還是更樹狀陣列是一樣的。當我樹狀陣列\(1122 ms\)過了之後,感覺線段樹有點懸,然後就沒寫了,這裡只是提供乙個思路。

#include using namespace std;

typedef long long ll;

const int n = 1e6 + 10;

int tree[n], n, m;

inline ll read()

while(c >= '0' && c <= '9')

return x * s;

}inline int lowbit(int x)

inline void add(int x, int value)

}inline int get_sum(int x)

return sum;

}int main()

// for(int i = 1; i <= n; i++)//除錯用的,可以不管。

// printf("%d%c", get_sum(i), i == n ? '\n' : ' ');

for(int i = 1; i <= m; i++)

add(l, -1);

}// for(int i = 1; i <= n; i++)

// printf("%d%c", get_sum(i), i == n ? '\n' : ' ');

}int l = 1, r = n;

while(l < r)

if(get_sum(l) >= 1) printf("%d\n", l);//特判一下查詢結果。

else puts("0");

return 0;

}

CF1354D MultiSet(樹狀陣列 二分)

題意 有兩種操作 一種是把乙個元素加入到集合中,一種是刪除集合中第k個元素,求解最後集合裡的元素。題解 祖傳的樹狀陣列套二分,這種題可遇不可求,比賽時直接秒了,不太會出現這麼裸的資料結構題了,includeusing namespace std const int maxn 1e6 500 int ...

E Minimum Array 樹狀陣列 二分

其實貪 心還是比 較顯 然其實貪心還是比較顯然 其實貪心還是 比較顯然對於 乙個ai 我們最 好找到b j n ai 對於乙個a i,我們最好找到b j n a i 對於乙個ai 我們 最好找到 bj n ai 這樣 對n求餘 後就是0 最 優這樣對n求餘後就是0,最優 這樣對n求餘 後就是0 最優...

求逆序 二分 樹狀陣列

include includeusing namespace std int a 100001 n,temp 100001 long long ct 0 void merg int first,int last else 把剩下的按序放進陣列。while i mid while j n for in...