比赛 NOIP2025模拟赛4 评测结果 RRRRRRRRRRRRRRRRRRRR
题目名称 Swap Swap Sort 最终得分 0
用户昵称 梦那边的美好TE 运行时间 28.106 s
代码语言 C++ 内存使用 4.57 MiB
提交时间 2025-11-27 12:25:03
显示代码纯文本
#include <iostream>
#include <cstdio>
using namespace std;
const int N=1e5+10;
int n,k,q,a[N],b[N],c[N],p[N],pos[N];
void add(int x,int y){
	for(;x<=k;x+=(x&-x))c[x]+=y;
	return;
} 
int ask(int x){
	int cnt=0;
	for(;x>0;x-=(x&-x))cnt+=c[x];
	return cnt;
}
long long work(){
	long long ans=0;
	for(int i=1;i<=n;i++)b[i]=pos[a[i]];//,cout<<b[i]<<" ";cout<<endl;
	for(int i=1;i<=k;i++)c[i]=0;
	for(int i=n;i>=1;i--){
		ans+=ask(b[i]-1);
		add(b[i],1);
	}
	return ans;
}
int main(){
	freopen("Sort.in","r",stdin);
	freopen("Sort.in","w",stdout);
	scanf("%d %d %d",&n,&k,&q);
	for(int i=1;i<=n;i++)scanf("%d",a+i);
	for(int i=1;i<=k;i++)p[i]=pos[i]=i;
	while(q--){
		int b;scanf("%d",&b);
		pos[p[b]]=pos[p[b+1]]=0;
		swap(p[b],p[b+1]);
		pos[p[b]]=b,pos[p[b+1]]=b+1;
		printf("%lld\n",work());
	}
	return 0;
}