Time Limit: 1000MS
Memory Limit: 65536KB
2 5 7 6 9 8 10 5 5 4 3 2 1
2 5
分析:直接模拟,从前往后扫,扫过的且满足条件的数就标记,直至所有的数都标记为止。
代码如下:
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <queue> using namespace std; #define N 10020 #define inf 0x3f3f3f3f #define ll long long int v[N]; int main() { #ifdef OFFLINE freopen("t.txt", "r", stdin); #endif int t, i, j, k, n; scanf("%d", &t); while (t--){ scanf("%d", &n); memset(v, inf, sizeof(v)); for (i = 1; i <= n; i++){ scanf("%d", &v[i]); } int ans = 0; i = 1; while (v[i] != inf || i <= n){ if (v[i] == inf) { i++; continue; } k = i; int tmp = k++; if (tmp == n) { ans++; break;//只留下最后一位就直接计数并退出 } else{ while (k <= n){ if (v[tmp] <= v[k] && v[k] != inf) { v[tmp] = inf; tmp = k; if (k == n) v[n] = inf;
//最后一个数满足就标记 } if (k == n) v[tmp] = inf;
//一个序列的最后一位标记 k++; } ans++;//计数 } } printf("%d\n", ans); } return 0; }