蒟蒻手写堆求助!!!本地AC洛谷RE
查看原帖
蒟蒻手写堆求助!!!本地AC洛谷RE
119725
皓月当蓝空楼主2021/6/22 16:24

如题,只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


*/
2021/6/22 16:24
加载中...