题意
一串数字,可以向后移动其中任意一个数直到遇到一个数比其大,问最少移动步数是多少。
思路
当一个数的右边有比它小的数则说明可以移动,ans++, minn记录从左到右某个位置经历过最小的数,这样直接遍历到哪跟minn一比较就行。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e6+100;
int a[N];
int main()
{
int t;
scanf("%d",&t);
for(int h=1;h<=t;h++)
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
int ans=0;
int x=N;
for(int i=n;i>=1;i--)
{
if(a[i]<x) x=a[i];
else ans++;
}
printf("Case #%d: %d\n",h,ans);
}
}