題目鏈結
對頂堆演算法
序列中從小到大排名為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,那就是三個 加起來數是連續的素數 演算法分析 主要還是考驗如何高效快速的得到素數表.下來就是如何得到開始計算的下標和把所有相加可能得出來。我先用的...