| 比赛 |
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;
}