```cpp
#include<bits/stdc++.h>
#define SZ(x) (int(x.size())-1)
#define all(x) x.begin(),x.end()
#define F(i,x,y) for(int i=(x);i<=(y);i++)
#define pb push_back
#define lowbit(x) (x&(-x))
#define mid ((l+r)>>1)
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
template<typename T>inline void chkmax(T &x,T y){x=max(x,y);}
template<typename T>inline void chkmin(T &x,T y){x=min(x,y);}
int n,m;
struct T{
int a,b,c=0,ans=0;
bool operator < (const T& y) const {
if(a^y.a)return a<y.a;
if(b^y.b)return b<y.b;
return c<y.c;
}
};
bool cmp(T a,T b)
{
if(a.b^b.b)return a.b<b.b;
return a.c<b.c;
}
T a[100010],b[100010];
int tree[100010];
long long ans[100010];
void add(int x,int y)
{
for(int i=x;i<=n+2;i+=lowbit(i))
tree[i]+=y;
}
int query(int x)
{
int res=0;
for(int i=x;i>=1;i-=lowbit(i))
res+=tree[i];
return res;
}
void CDQ(int l,int r)
{
if(l>=r)return;
CDQ(l,mid);
CDQ(mid+1,r);
sort(a+l,a+mid+1,cmp);
sort(a+mid+1,a+r+1,cmp);
int p1=l,p2=mid+1;
while(p2<=r)
{
while(a[p2].b>a[p1].b&&p1<=mid)
{
add(a[p1].c+1,1);
// cout<<"add1"<<' '<<a[p1].c<<' '<<endl;
p1++;
}
ans[a[p2].c]+=query(a[p2].c+1);
a[p2].ans+=query(a[p2].c+1);
// cout<<"query1"<<' '<<a[p2].c<<' '<<query(a[p2].c+1)<<endl;
p2++;
}
F(i,l,p1-1)
add(a[i].c+1,-1);
p1=mid;
p2=r;
while(p1>=1)
{
while(a[p2].b>a[p1].b&&p2>mid)
{
add(a[p2].c+1,1);
// cout<<"add2"<<' '<<a[p2].c<<' '<<endl;
p2--;
}
ans[a[p1].c]+=query(a[p1].c+1);
a[p1].ans+=query(a[p1].c+1);
// cout<<"query2"<<' '<<a[p1].c<<' '<<query(a[p1].c+1)<<endl;
p1--;
}
F(i,p2+1,r)
add(a[i].c+1,-1);
}
int pos[100010];
int main()
{
ios::sync_with_stdio(false);
cin>>n>>m;
F(i,1,n)
{
cin>>a[i].a;
a[i].a=a[i].a;
a[i].b=n-i+1;
pos[a[i].a]=i;
}
int idx=n;
F(i,1,m)
{
int x;
cin>>x;
a[pos[x]].c=idx--;
}
long long aa=0;
sort(a+1,a+1+n);
F(i,1,n)
{
aa+=query(a[i].b);
add(a[i].b,1);
}
F(i,1,n)add(a[i].b,-1);
// F(i,1,n)
// {
// if(a[i].c)continue;
// a[i].c=0;
// }
// F(i,1,n)cout<<a[i].a<<' '<<a[i].b<<' '<<a[i].c<<endl;
sort(a+1,a+1+n);
CDQ(1,n);
// F(i,1,n)cout<<ans[i]<<endl;//ans[i]+=ans[i-1];
F(i,1,m)
{
cout<<aa<<endl;
aa-=ans[n-i+1];
}
return 0;
}
```
by ByGones @ 2023-06-27 17:33:33
@[ByGones](/user/209848)
$68$ 行,`while(p1>=1)` 改为 `while(p1>=l)`,可过。
by c20231020 @ 2023-06-27 18:59:35
@[c20231020](/user/561785) 太感谢了,我已经犯了至少五次这样的错误了。
粉丝36->39,done.
by ByGones @ 2023-06-27 21:24:28