这道题 hash就可以写了 弄了半天有点智障 强行压一压就okay了的说
#include#include #include 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;}