题目链接
题意:内向的人坐没有人且最窄的座位,外向的人坐有人且最宽的座位。
思路:栈和队列,将栈入队。
#include<stdio.h>
#include<queue>
#include<stack>
#include<algorithm>
using namespace std;
char a[400010];
struct node{int a,b;
}w[200010];
bool cmp(node e,node f)
{
return e.b<f.b;
}
int main()
{
int n,i,j=1;
queue<int>q;
stack<node>s;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&w[i].b);
w[i].a=i;
}
sort(w+1,w+1+n,cmp);
scanf("%s",a);
for(i=0;i<2*n;i++)
{
if(a[i]=='0')
{
q.push(w[j].a);//入列
s.push(w[j]);//入栈
j++;
}
else
{
node e;
e=s.top();//出栈
q.push(e.a);//入栈
s.pop();
}
}
int p=0;
while(!q.empty())
{
if(p==0)printf("%d",q.front());
else printf(" %d",q.front());
q.pop();
p++;
}
}