这道题 hash就可以写了 弄了半天有点智障 强行压一压就okay了的说
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int M=150007,mod=23333333; int read(){ int ans=0,f=1,c=getchar(); while(c<'0'||c>'9'){if(c=='-') f=-1; c=getchar();} while(c>='0'&&c<='9'){ans=ans*10+(c-'0'); c=getchar();} return ans*f; } int first[mod],tot,next[mod],sum; struct node{int v,next,pos;}e[M],q[M]; int n,m,k,a[M]; int gethash(int x){ int w=x%mod; for(int i=first[w];i;i=e[i].next) if(e[i].v==x) return i; tot++; e[tot].v=x; e[tot].next=first[w]; first[w]=tot; return tot; } int push_hash(int x){ int w=x%mod; for(int i=first[w];i;i=e[i].next) if(e[i].v==x) return i; return 0; } void insert(int a,int b){sum++; q[sum].v=b; q[sum].next=next[a]; next[a]=sum;} int main() { n=read(); m=read(); for(int i=1;i<=n;i++) a[i]=read(); for(int i=n;i;i--) insert(gethash(a[i]),i); for(int i=1;i<=m;i++){ k=push_hash(read()); if(!k||!next[k]) printf("-1 "); else printf("%d ",q[next[k]].v),next[k]=q[next[k]].next; } return 0; }