題解 poj3784 對頂堆演算法 排序 優先佇列

2021-08-25 08:12:48 字數 733 閱讀 9537

題目鏈結

對頂堆演算法

序列中從小到大排名為1~m/2的整數儲存到大根堆中,序列中從小到大排名m/2+1~m的整數儲存在小根堆中,小根堆堆頂就是序列中位數

#include

#include

#include

#include

using

namespace

std;

#define _rep(i,a,b) for(int i=(a);i<=(b);i++)

const

int n=1e4+10;

int id,m;

priority_queuedq;

priority_queue,greater >xq;

vector

vx;inline

void ddd(int x)

if(xq.top()else dq.push(x);

while(xq.size()while(xq.size()>dq.size()+1)

dq.push(xq.top()),xq.pop();

}int main()

for(int i=0;iif(i&&i%10==0)puts("");

if(i%10!=0)putchar(' ');

printf("%d",vx[i]);

}puts("");

}return

0;}

10 16 對頂堆演算法研究(POJ 3784)

考慮維護兩個堆 乙個堆是大根堆,儲存1 x的元素 乙個堆是小根堆,儲存x 1 n的元素 對於乙個加入的元素y,考慮將其加入大根堆or小根堆?如果y mid,那麼將其加入小根堆 上面的堆 如果y include include include using namespace std int t,pos...

Poj3784(對頂堆維護中位數)

建立乙個大根堆與小根堆,大根堆中存 n 1 2 的元素,中位數即為大根堆堆頂 用乙個從大到小排序的優先佇列q1來模擬小於x的數。從小到大排序的優先佇列q2來模擬大於x的數。動態維護兩個優先佇列的元素個數。q1.size q2.size 輸入的數為偶數個時,q1.size q2.size 1 輸入的數...

POJ 2739題解 小菜

題意簡述 題目要求找出1到10000內數,有多少個素數組成的總數 比如3只有自己那就是3,比如41有2 3 5 7 11 13,11 13 17,和41,那就是三個 加起來數是連續的素數 演算法分析 主要還是考驗如何高效快速的得到素數表.下來就是如何得到開始計算的下標和把所有相加可能得出來。我先用的...