手写堆爆炸求调
查看原帖
手写堆爆炸求调
577683
Neil_Seniorious楼主2023/5/31 12:54
#include<bits/stdc++.h>
using namespace std;

inline int read(){
	short f=1;int x=0;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
	while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c^48);c=getchar();}
	return x*f;
}
inline void readch(char *str){
	int lenn=0;
	char c=getchar();
	while(c==' '||c=='\n'||c=='\r'){
		c=getchar();
	}
	while(c>='A'&&c<='Z'||c>='a'&&c<='z'||c>='0'&&c<='9'){
		str[lenn++]=c;
		c=getchar();
		if(c==' '||c=='\n'||c=='\r') break;
	}
}
int max(int a,int b){return a>b?a:b;}
int min(int a,int b){return a<b?a:b;}
int swap(int &a,int &b){int c=a;a=b;b=c;}

int n,len,now;
char ch[15];
struct small_put{
	int a[500005],len=0;
	void put(int x){
		len++;
		a[len]=x;
		int son=len;
		while(son>1&&a[son]<a[son>>1]){
			swap(a[son],a[son>>1]);
			son>>=1;
		}
	}
	int get(){
		int now=a[1];
		a[1]=a[len];
		len--;
		int fa=1;
		while(1){
			int l=fa<<1;
			if(l>len) break;
			int r=l+1,son;
			if(r>len) son=l;
			else{
				if(a[l]<a[r]) son=l;
				else son=r;
			}
			if(a[son]<a[fa]){
				swap(a[fa],a[son]);
				fa=son;
			}
			return now;
		}
	}
}qs;
struct big_put{
	int a[500005],len=0;
	void put(int x){
		len++;
		a[len]=x;
		int son=len;
		while(son>1&&a[son]>a[son>>1]){
			swap(a[son],a[son>>1]);
			son>>=1;
		}
	}
	int get(){
		int now=a[1];
		a[1]=a[len];
		len--;
		int fa=1;
		while(1){
			int l=fa<<1;
			if(l>len) break;
			int r=l+1,son;
			if(r>len) son=l;
			else{
				if(a[l]>a[r]) son=l;
				else son=r;
			}
			if(a[son]>a[fa]){
				swap(a[fa],a[son]);
				fa=son;
			}
		}
		return now;
	}
}qb;

int main(){
	n=read();
	for(int i=1;i<=n;i++){
		readch(ch);
		if(ch[0]=='A'){
			int k=4,f=1,res=0;
			if(ch[k]=='-') f=-1,k++;
			while(ch[k]>='0'&&ch[k]<='9'){
				res=(res<<3)+(res<<1)+(ch[k]^48);
				k++;
			}
			qs.put(res*f);
		}
		else{
			while(qb.len!=now){
				if(qb.len<now) qb.put(qs.get());
				else qs.put((qb.get()));
			}
			while(qb.a[1]>qs.a[1]){
				qs.put(qb.get());
				qb.put(qs.get());
			}
			printf("%d\n",qb.a[1]);
			now++;
		}
	}
	return 0;
}
2023/5/31 12:54
加载中...