时间复杂度O(Max(n,m))但还是TLE3个点40分
用的是STL里面的list,代码如下:
#include<iostream>
#include<cstdio>
#include<list>
#define Iter list<int>::iterator
using namespace std;
int n;
list<int>mlist;
Iter pos[100005];//存储各个数的迭代器
Iter it;
int k,p;
int m;
int t;
int main()
{
cin>>n;
mlist.push_front(1);
pos[1]=mlist.begin();
for(int i=2;i<=n;i++)
{
cin>>k>>p;
if(p==0)
{
it=pos[k];
pos[i]=mlist.insert(it,i);//会返回新的迭代器
}
else if(p==1)//在右边插入
{
it=pos[k];
it++;
pos[i]=mlist.insert(it,i);
}
}
cin>>m;
for(int i=1;i<=m;i++)
{
cin>>t;
mlist.remove(t);
}
Iter nit=mlist.end();
nit--;
for(Iter i=mlist.begin();i!=nit;i++)
{
if(i==mlist.end())break;
cout<<*i<<" ";
}
cout<<*nit<<endl;
return 0;
}