?? 佳佳的難題.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 + -