Description

Ultra-QuickSort produces the output
Your task is to determine how many swap operations Ultra-QuickSort needs to perform in order to sort a given input sequence.
Input
The input contains several test cases. Every test case begins with a line that contains a single integer n < 500,000 -- the length of the input sequence. Each of the the following n lines contains a single integer 0 ≤ a[i] ≤ 999,999,999, the i-th input sequence element. Input is terminated by a sequence of length n = 0. This sequence must not be processed.
Output
For every input sequence, your program prints a single line containing an integer number op, the minimum number of swap operations necessary to sort the given input sequence.
Sample Input
5 9 1 0 5 4 3 1 2 3 0
Sample Output
6 0
这道题只是求逆序对个数,注意数字比较大,数组和答案要用long long存,下面是程序:
#include<stdio.h>
#include<iostream>
#define ll long long
using namespace std;
ll a[500005],tp[500005],s=0;
ll ch(){
ll s=0;
char c=getchar();
while(c<'0'||c>'9'){
c=getchar();
}
while(c>='0'&&c<='9'){
s*=10;
s+=c-'0';
c=getchar();
}
return s;
}
int read(ll *p,int &n){
n=ch();
int i;
for(i=1;i<=n;i++){
p[i]=ch();
}
return n;
}
void out(ll x){
if(x>9){
out(x/10);
}
putchar(x%10+'0');
}
void h(int l,int m,int r,ll *p,ll *tp){
int i=l,j=m+1,k=l;
while(i<=m&&j<=r){
if(p[i]>p[j]){
tp[k++]=p[j++];
s+=m-i+1;
}
else{
tp[k++]=p[i++];
}
}
while(i<=m){
tp[k++]=p[i++];
}
while(j<=r){
tp[k++]=p[j++];
}
for(i=l;i<=r;i++){
p[i]=tp[i];
}
}
void msort(int l,int r,ll *p,ll *tp){
if(l==r){
return;
}
int m=l+r>>1;
msort(l,m,p,tp);
msort(m+1,r,p,tp);
h(l,m,r,p,tp);
}
int main(){
int n;
while(read(a,n)){
s=0;
msort(1,n,a,tp);
out(s);
putchar('\n');
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!