#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int lis[100005],next1[100005];//next[i]指向第i个数的后一个数
int q,len;
int s,a,b;
int main()
{
lis[++len]=1;
next1[0]=1;//next[0]相当于一个指针,就指向第一个元素
scanf("%d",&q);
for(int i=1;i<=q;i++)//需要支持下面的操作,//应该是一定会找到的,一定在链表中是合法的
{
scanf("%d",&s);
if(s==1)
{
scanf("%d%d",&a,&b);//将b插入到a后面
for(int j=next1[0];j;j=next1[j]) //且保证任何时间表中所有数字均不相同
{
if(lis[j]==a)
{
lis[++len]=b;
next1[len]=next1[j];
next1[j]=len;
break;//无所谓,在循环完也没事
}
}
}
if(s==2)
{
scanf("%d",&a);//询问 xx 后面的元素是什么
for(int j=next1[0];j;j=next1[j])
{
if(lis[j]==a)
{
printf("%d\n",lis[next1[j]]);
}
}
}
if(s==3)
{
scanf("%d",&a);
for(int j=next1[0];j;j=next1[j])
{
if(lis[j]==a)
{
next1[j]=next1[next1[j]];
}
}
}
}
return 0;
}
这个题 最后两个点TLE了,不知道怎么才能节省时间