因为只允许向后挪一种操作,所有可以倒序操作,如果当前元素比后面的元素都小,那么它就不需要后挪,如果每次都向后比较n^2的复杂度,肯定超时,所以我们可以用一个变量记录当前处理过元素中的最小值,只和最小值比较即可
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MAX 3000007
using namespace std;
int num[MAX];
int main ( )
{
int t ,n;
scanf ( "%d" , &t );
int c = 1;
while ( t-- )
{
scanf ( "%d" , &n );
int ans = 0;
for ( int i = 1 ; i <= n ; i++ )
scanf ( "%d" , &num[i] );
int minn = num[n];
for ( int i = n-1 ; i > 0 ; i-- )
if ( minn < num[i] ) ans++;
else minn = num[i];
printf ( "Case #%d: %d\n" , c++ , ans );
}
}