题目大意
一串数字,可以向后移动其中任意一个数直到遇到一个数比其大,问最少移动步数是多少。
思路
当一个数的右边有比它小的数则说明可以移动,ans++, minn记录从左到右某个位置经历过最小的数,这样直接遍历到哪跟minn一比较就行。
代码
#include <set>
#include <cstdio>
#include <cstring>
#include <vector>
#include <stack>
#include <string>
#include <deque>
#include <queue>
#include <iostream>
#include <sstream>
#include <algorithm>
typedef long long LL;
using namespace std;
const int maxn = 1000000 + 10;
int num[maxn];
int main() {
freopen("input.txt", "r", stdin);
int T; cin >> T;
int kase = 0;
while(T--) {
int n; cin >> n;
for(int i = 1; i <= n; i++) {
scanf("%d", &num[i]);
}
int ans = 0;
int minn = num[n];
for(int i = n; i >= 0; i--) {
if (minn < num[i]) {
ans++;
}
minn = min(num[i], minn);
}
printf("Case #%d: %d\n", ++kase, ans);
}
return 0;
}