题目:https://odzkskevi.qnssl.com/b080f15130ed0e43b4c0769fe4c61dff?v=1531969963
思路:
参考了https://blog.csdn.net/keshuai19940722/article/details/38778243和https://www.cnblogs.com/jerryRey/p/4622927.html
代码:
#include<iostream>
#include <cstdio>
#include <cstring>
#include <stack>
#include <vector>
#include <algorithm>
using namespace std;
const int maxn = 1005;
int N, pos[maxn];
vector<int> g[maxn];
int main()
{
int x;
stack<int> s;
while(scanf("%d",&N)!=EOF)
{
for(int i=1;i<=N;i++)
{
scanf("%d",&x);
pos[x]=i;
g[i].clear();
}
int root;
scanf("%d",&root);
s.push(root);
for(int i=1;i<N;i++)
{
scanf("%d",&x);
while(true)
{
int u=s.top();
if(u==root||pos[u]+1<pos[x])
{
g[u].push_back(x);
s.push(x);
break;
}
else{
s.pop();
}
}
}
for(int i=1;i<=N;i++)
{
printf("%d:",i);
for(int j=0;j<g[i].size();j++)
{
cout<<g[i][j]<<" ";
}
cout<<endl;
}
}
return 0;
}