1.C++ STL库里的stack和手写栈有什么区别,为什么stack容易MLE?
2.用最大堆实现最大优先队列,与STL里的优先队列有什么区别?
救救孩子吧……
#include<iostream>
#include<algorithm>
#include<climits>
using namespace std;
void max_heapify(int a[],int i,int n){
int l,r,largest;
l=2*i;
r=2*i+1;
if(l<=n && a[l]>a[i]) largest=l;
else largest=i;
if(r<=n && a[r]>a[largest]) largest=r;
if(largest!=i){
swap(a[i],a[largest]);
max_heapify(a,largest,n);
}
}
void build_max_heap(int a[],int n){
for(int i=n/2;i>=1;i--){
max_heapify(a,i,n);
}
}
void heapsort(int a[],int n){
build_max_heap(a,n);
for(int i=n;i>=2;i--){
swap(a[1],a[i]);
n--;
max_heapify(a,1,n);
}
}
int heap_maximum(int a[]){
return a[1];
}
int heap_extract_max(int a[],int n){
int max;
if(n>=1){
max=a[1];
a[1]=a[n];
n--;
max_heapify(a,1,n);
return max;
}
else return INT_MIN;
}
void heap_increase_key(int a[],int i,int key){
if(key>=a[i]){
a[i]=key;
while(i>1 && a[i/2]<a[i]){
swap(a[i],a[i/2]);
i/=2;
}
}
}
void max_heap_insert(int a[],int key,int n){
n++;
a[n]=INT_MIN;
heap_increase_key(a,n,key);
}
int main(){
int n,i,j,a[1000],b,maxn;
cin>>n;
for(i=1;i<=n;i++){
cin>>a[i];
}
build_max_heap(a,n);
maxn=heap_maximum(a);
max_heap_insert(a,54678,n);
cout<<maxn<<endl;
for(j=1;j<=n;j++){
cout<<a[j]<<" ";
}
return 0;
}