📄 佳佳的难题.cpp
字号:
//分治的思想,归并排序去做。
#include<iostream>
using namespace std;
int s[1000002],t[1000002];
__int64 cnt;
void sortf(int b,int e)
{
if(b >= e )
return;
sortf(b,(b+e)/2);//归并排序的递归步
sortf((b+e)/2+1,e);
//以下是归并排序的合并步。S为原数组,t为存过程值的辅助数组。
int i = b,j = (b+e)/2+1, k = b;
while(i<=(b+e)/2&&j<=e)
{
if(s[i] <= s[j])
t[k++] = s[i++];
else
{
cnt += j - k;
t[k++] = s[j++];
}
}
while(i<=(b+e)/2)t[k++]=s[i++];
while(j<=e)t[k++]=s[j++];
for(i=b;i<=e;i++)
s[i] = t[i];
}
int main()
{
int i,n;
scanf("%d",&n);
while(n!=0)
{
for(i=0;i<n;i++)
scanf("%d",&s[i]);
cnt = 0;
sortf(0,n-1);
printf("%I64d\n",cnt);
scanf("%d",&n);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -