题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5122
解题报告:定义一种排序算法,每一轮可以随机找一个数,把这个数与后面的比这个数小的交换,一直往后判断,直到后面没有比这个数小的,这样称为一轮,现在给定一个长度为n的序列,要你求,至少要经过多少轮,可以使这个序列成为有序的。
由于只能跟后面的数进行比较,所以我只要统计后面的数有比这个数小的数的个数就可以了。从后往前扫一遍,每次更新当前最小的。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
typedef __int64 INT;
const int maxn = 1e6+; int A[maxn]; int main()
{
int T,n,kase = ;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i = ;i < n;++i)
scanf("%d",&A[i]);
INT ans = ;
int M = 0x7fffffff;
for(int i = n-;i >= ;--i)
{
if(M < A[i]) ans++;
M = min(M,A[i]);
}
printf("Case #%d: %I64d\n",kase++,ans);
}
return ;
}