20(不求调,求一组10以内的hack数据)
查看原帖
20(不求调,求一组10以内的hack数据)
235901
Always_Remember_It楼主2022/8/6 17:35
#include <bits/stdc++.h>
using namespace std;
//#define fo(NOIp_a,NOIp_b,NOIp_c,NOIp_d) for(int NOIp_a=NOIp_b;NOIp_a<=NOIp_c;NOIp_a+=NOIp_d)
//#define of(NOIp_a,NOIp_b,NOIp_c,NOIp_d) for(int NOIp_a=NOIp_b;NOIp_a>=NOIp_c;NOIp_a-=NOIp_d)
const int N=1e5+10;
int a[N],b[N],num[N],l[N],n[N];
bool vis[N];
bool cmp(int a,int b){
	return a>b;
}
/*inline int fast_read(){
	int fast_read_s=0,fast_read_f=1; char fast_read_ch=getchar();
	while(fast_read_ch<'0'||fast_read_ch>'9'){if(fast_read_ch=='-') fast_read_f=-1; fast_read_ch=getchar();}
	while(fast_read_ch>='0'&&fast_read_ch<='9'){fast_read_s=fast_read_s*10+fast_read_ch-'0'; fast_read_ch=getchar();}
	return fast_read_s*fast_read_f;
}*/
int main(){
	int t;cin>>t;
	for(int i=1;i<=t;i++){
		cin>>a[i];
		b[i]=a[i];
		num[a[i]]=i;
		l[i]=i-1;
		n[i]=i+1;
	}
	/*stable_*/sort(a+1,a+t+1,cmp);
	/*for(int i=1;i<=t;i++) cout<<a[i]<<" ";
	cout<<endl;*/
	int u=t;
	for(int i=1;i<=t;i++){
		if(num[a[i]]==u) continue;
		int k=a[i];
		int p=num[k];
		int t=n[p];
		int o=b[t];
		if((!vis[k])&&(!vis[o])){
			cout<<k<<" "<<o<<" ";
			vis[k]=1;
			vis[o]=1;
			n[l[p]]=n[t];
			l[n[t]]=l[p];
			if(num[a[i]]==u-1) u-=2;
		}
	}
	cout<<endl;
	return 0;
}
2022/8/6 17:35
加载中...