如题,只A了最后两个点是什么操作??
前面小数据的点反而RE了
#include <cstdio>
#define N 1000006
#define inf 2147483647
#define re register int
#define in inline
in int min(int a,int b){return a<b?a:b;}
in int swap(int &a,int &b){int tmp=a;a=b;b=tmp;}
struct srt_heap {
int val[N*2];
int size;
in int fa(int x) {return x==1?x:x/2;}
in int ls(int x) {return 2*x;}
in int rs(int x) {return 2*x+1;}
in void push(int x){
val[++size]=x;
int tmp=size;
while(tmp!=1&&val[tmp]<val[fa(tmp)]) {
swap(val[tmp],val[fa(tmp)]);
tmp=fa(tmp);
}
return ;
}
in int top(){return val[1];}
in void pop(){
val[1]=val[size],val[size]=inf,size--;
int tmp=1;
while(tmp<=size&&val[tmp]>min(val[ls(tmp)],val[rs(tmp)])) {
if(val[ls(tmp)]<val[rs(tmp)]) swap(val[tmp],val[ls(tmp)]),tmp=ls(tmp);
else swap(val[tmp],val[rs(tmp)]),tmp=rs(tmp);
}
}
}a;
int n;
in int read()
{
int ans=0;
char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar()) ;
for(;ch>='0'&&ch<='9';ch=getchar()) ans=ans*10+ch-'0';
return ans;
}
int main()
{
//freopen("luogu.p3378.1.in","r",stdin);
re i;
int op,x;
n=read();
for(i=0;i<=2*n+1;i++) a.val[i]=inf;
for(i=1;i<=n;i++) {
op=read();
if(op==1) x=read(),a.push(x);
if(op==2) printf("%d\n",a.top());
if(op==3) a.pop();
}
return 0;
}
/*
5
1 2
1 5
2
3
2
*/