rt。。。
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
LL N,M,Ans[50005];
struct node{
LL inx,id=0,dat,ans;
void prt(){cout<<dat<<' '<<id<<endl;}
}a[50005];
struct BitTree{
LL C[50005];
BitTree(){memset(C,0,sizeof(C));}
LL lowbit(LL X){return X&-X;}
void add(LL X,LL K){for(;X<=N;X+=lowbit(X))C[X]+=K;}
LL sum(LL X)
{LL ret=0;for(;X;X-=lowbit(X))ret+=C[X];return ret;}
}BIT;
int cmp1(node A,node B){return A.inx>B.inx;}
int cmp2(node A,node B){return A.id<B.id;}
void CDQ(LL LHQ,LL RMQ){
if(LHQ>=RMQ)return;
LL mid=(LHQ+RMQ)>>1;
CDQ(LHQ,mid);CDQ(mid+1,RMQ);
sort(a+LHQ,a+mid+1,cmp2);
sort(a+mid+1,a+RMQ+1,cmp2);
LL p=LHQ;
for(int i=mid+1;i<=RMQ;i++){
while(a[p].id<a[i].id&&p<=mid)
BIT.add(a[p].dat,1),p++;
Ans[a[i].id]+=BIT.sum(a[i].dat);
}
for(int i=1;i<p;i++)BIT.add(a[p].dat,-1);
p=mid;
for(int i=RMQ;i>=mid-1;i--){
while(a[p].id<a[i].id&&p>=LHQ)
BIT.add(N-a[p].dat+1,1),p--;
Ans[a[i].id]+=BIT.sum(N-a[i].dat+1);
}
for(int i=mid;i>p;i--)BIT.add(N-a[p].dat+1,-1);
}
int main(){
LL A[50005],pos[50005];
cin>>N>>M;
for(int i=1;i<=N;i++)
cin>>A[i],pos[A[i]]=i,a[i].inx=i,a[i].dat=A[i];
for(int i=N;i>=N-M+1;i--)
{int t;cin>>t;a[pos[t]].id=i;}
for(int i=1,cnt=0;i<=N;i++)
if(a[i].id==0)a[i].id=++cnt;
sort(a+1,a+N+1,cmp1);
CDQ(1,N);
for(int i=1;i<=N;i++)
Ans[i]+=Ans[i-1];
for(int i=N;i>=N-M+1;i--)
cout<<Ans[i]<<endl;
return 0;
}