初学堆的使用,写完之后分分钟又忘了,而且这个代码效率极低,100000个数要0.5秒,比stl还慢.回去还得再搞一下才能A群赛6的C题。
#include<bits/stdc++.h>
using namespace std;
struct heap
{
int h[200020],size;
void init()
{
size=0;
}
void push(int x)
{
int t;
h[size]=x;
int i=(size-1)/2,j=size;
while (h[i]<h[j])
{
t=h[i];
h[i]=h[j];
h[j]=t;
j=(j-1)/2;
i=(i-1)/2;
}
size++;
}
void pop()
{
int t;
printf("%d ",h[0]);
h[0]=-100000;
swap(h[0],h[size]);
size--;
int i=0,j;
if (h[1]>h[2]) j=1;else j=2;
while (h[i]<h[j])
{
t=h[i];
h[i]=h[j];
h[j]=t;
i=j;
if (h[j*2+1]>h[j*2+2]) j=j*2+1;else j=j*2+2;
}
}
bool empty()
{
if (size==0) return true;
else return false;
}
};
int main()
{
int n,i,t;
srand(time(0));
heap my_heap;
my_heap.init();
cin>>n;
for (i=1;i<=n;i++)
{
my_heap.push(rand());
}
while (my_heap.empty()==false) my_heap.pop();
}