CQOI2015 任務查詢系統

2022-03-03 17:27:17 字數 1024 閱讀 2285

主席樹維護k大,考慮到利用主席樹字首和的性質。把每個任務拆分成權值為1的進入操作,和權值為-1的退出操作(注意因為是閉區間,所以右邊的位置加進去的時候需要+1)

(應該是個動態開點的權值線段樹一樣的東西吧)維護v,表示該節點維護的任務數量是多少。sum表示該節點維護的任務總和是多少。輸出k大的時候(因為有可能存在該節點有很多一樣的值的情況)直接用總和除以數量即可。

**如下:

#include#include#include#include#define maxn 120010

using namespace std;

int n,m,cnt,tot,sum;

int rt[maxn],cur[maxn];

long long pre=1;

struct nodenode[maxn<<1];

struct node2t[maxn<<5];

inline bool cmp(struct node x,struct node y)

long long query(int now,int l,int r,int k)

int main()

sort(&cur[1],&cur[sum+1]);

sum=unique(&cur[1],&cur[1+sum])-cur-1;

sort(&node[1],&node[1+cnt],cmp);

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

node[i].p=lower_bound(&cur[1],&cur[1+sum],node[i].p)-cur;

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

modify(rt[node[i].pos],rt[node[i-1].pos],1,sum,node[i].p,node[i].w);

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

if(!rt[i])

rt[i]=rt[i-1];

while(n--)

return 0;

}

CQOI2015 任務查詢系統

因為對於任務來說,對一段區間是有用的,於是我們可以用差分來表示區間,然後主席樹維護字首區間和即可。然後因為我們是求和,我們同時主席樹也要維護區間的數字個數,因為求k小和。但是有可能當前區間的有a個相同的數字,我們求b個和,然後bac pragma gcc optimize 2 include def...

CQOI 2015 任務查詢系統

給定 m 個任務 l,r,p 其中 l,r 代表這個任務將於時間 l,r 內進行,而 p 代表的是這個任務的優先順序 有 n 個詢問 x,k 每次詢問在時間點 x 進行的所有任務按優先順序從小到大排序,前 k 個任務的優先順序之和 求前 k 個數的和,我們想到主席樹 區間覆蓋問題,我們想到差分 眾所...

CQOI2015 任務查詢系統

time limit 20 sec memory limit 512 mb submit 3352 solved 1072 submit status discuss 最近實驗室正在為其管理的超級計算機編制一套任務管理系統,而你被安排完成其中的查詢部分。超級計算機中的 任務用三元組 si,ei,pi...