就是类似领接表想法
#include<iostream>
#include<cstring>
using namespace std;
int n,m;
int T;
const int N=1e5+10;
int pos[N];
int h[N],e[N],ne[N],idx;
void add(int x,int u)
{
// cout<<x<<' '<<u<<endl;
int t;
if(h[u]==-1)
{
e[idx]=x;
ne[idx]=-1;
h[u]=idx++;
}
else
{
for(int i=h[u];i!=-1;i=ne[i])if(i!=-1) t=i;
e[idx]=x;
ne[idx]=-1;
ne[t]=idx++;
}
}
void erase(int i)
{
h[i]=ne[h[i]];
}
int main()
{
memset(h,-1,sizeof h);
cin>>n>>m;
for(int i=0;i<n;i++)
{
cin>>pos[i];
}
cin>>T;
string a;
while(T--)
{
cin>>a;
if(a=="push")
{
int x;
cin>>x;
if(x<n&&x>=0) add(x,pos[x]);
else add(x,0);
}
else
{
for(int i=n-1;i>=0;i--)
{
if(h[i]!=-1)
{
cout<<e[h[i]]<<endl;
erase(i);
break;
}
}
}
// cout<<h[0]<<endl;
}
}