#include<cstdio> #include<cstring> #include<cctype> #include<algorithm> #define lowbit(x) (x&-x) using namespace std; int read(){ char c;int s=0,t=1; while(!isdigit(c=getchar()))if(c==‘-‘)t=-1; do{s=s*10+c-‘0‘;}while(isdigit(c=getchar())); return s*t; } const int maxn=100010; int b[maxn],d[maxn],ans[maxn],n,m,tot=0,c[maxn]; struct cyc{int t,kind,x,y;}a[maxn],e[maxn]; void modify(int x,int k){for(int i=x;i<=n;i+=lowbit(i))c[i]+=k;} int query(int x){int ans=0;for(int i=x;i>=1;i-=lowbit(i))ans+=c[i];return ans;} bool cmp(cyc a,cyc b){return a.x<b.x||(a.x==b.x&&a.y<b.y)||(a.x==b.x&&a.y==b.y&&a.t<b.t);} void CDQ(int l,int r){ if(l==r)return; int mid=(l+r)>>1; for(int i=l;i<=r;i++){ if(a[i].t<=mid&&a[i].kind==1)modify(a[i].y,-1); if(a[i].t>mid&&a[i].kind==0)ans[a[i].t/2]+=query(n)-query(a[i].y); } for(int i=l;i<=r;i++)if(a[i].t<=mid&&a[i].kind==1)modify(a[i].y,1); int x1=l-1,x2=mid; for(int i=l;i<=r;i++)if(a[i].t<=mid)e[++x1]=a[i];else e[++x2]=a[i]; for(int i=l;i<=r;i++)a[i]=e[i]; CDQ(l,mid);CDQ(mid+1,r); } int main(){ n=read();m=read(); int ANS=0; for(int i=1;i<=n;i++){ b[i]=read();d[b[i]]=i; modify(b[i],1); ANS+=i-query(b[i]); } for(int i=1;i<=m;i++){ int x=read(); a[++tot]=(cyc){tot,1,d[x],x}; a[++tot]=(cyc){tot,0,d[x],x}; } sort(a+1,a+tot+1,cmp); CDQ(1,tot); for(int i=0;i<m;i++){ printf("%d\n",ANS); ANS-=ans[i]; } return 0; }