队列复原+插入
- 小瓜现在让1到n这n个整数排成一列,但是他只告诉你每个整数的后面那个数是什么(最后一个整数的后面那个数是0)。此外,他还打算在这个队列中插入m个整数,他将告诉你这m个整数插入的位置。请你帮忙复原插入m个整数之后的队列。
Input
第一行两个整数n(n<=100000)和m(m<=100),表示有n个整数,后续又将插入m个整数。 接下来n行,每行两个数i,j,表示排在整数i后面的那个数是j。 接下来m行,每行两个数a,b,表示在编号为a的数后面插入编号为b的数(保证 n+1 <= b <= n+m)
Output
n+m行,表示复原后的队列。
Sample Input
4 2
1 3
3 4
4 2
2 0
1 5
2 6
Sample Output
1
5
3
4
2
6
Hint
注意存在添加顺序的问题 例如在8后添加7再添加9之后的序列是 8 9 7
分析: 看代码就懂了!👍用了c++11的auto
#include<iostream>
#include<vector>
using namespace std;
int num[100001];
int ans[100001];
int main()
{
int m,n;
cin>>n>>m;
int a,b;
for(int i=1;i<=n;i++)
{
cin>>a>>b;
num[b]=a;
}
int t=num[0];
ans[n]=t;
int cnt=1;
while(cnt<n)
{
t=num[t];
ans[n-cnt]=t;
cnt++;
}
vector<int>v;
for(int i=1;i<=n;i++)
{
v.push_back(ans[i]);
}
for(int i=1;i<=m;i++)
{
cin>>a>>b;
for(auto it:v)
{
if((*it)==a)
{
v.insert(++it,b);
break;
}
}
}
for(auto i:v)
{
cout<<i<<endl;
}
return 0;
}