洛谷八连测r4t2

来源:互联网 发布:java类适配器 编辑:程序博客网 时间:2024/05/14 06:05
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn=1e5+10;
inline int read(){
 int num=0,flag=1; char ch=getchar();
 while(ch<'0'||ch>'9'){
  if(ch=='-') flag=-1;
  ch=getchar();
 }
 while(ch>='0'&&ch<='9') num=num*10+ch-'0',ch=getchar();
 return flag*num;
}
int n,nxt[maxn],vis[maxn],p[maxn];
struct node{
 int x,y;
}a[maxn];
priority_queue<node,vector<node>,greater<node> > q;
bool operator > (node a,node b){
 return a.x<b.x;
}
int main(){
 n=read();
 for(int i=1;i<=n;i++){
  a[i].x=read(); a[i].y=i; nxt[i-1]=i;
  q.push(a[i]);
  p[i]=i-1;
 }
 while(!q.empty()){
  node now=q.top(); q.pop();
  if(vis[now.y]) continue;
  if(nxt[now.y]==0||vis[nxt[now.y]]) continue;
  vis[now.y]=true;
  vis[nxt[now.y]]=true;
  cout<<a[now.y].x<<' '<<a[nxt[now.y]].x<<' ';
  nxt[p[now.y]]=nxt[nxt[now.y]];
  p[nxt[nxt[now.y]]]=p[now.y];
 }
 cout<<endl;
 return 0;
}
原创粉丝点击