洛谷 P7714 「EZEC-10」排列排序

#include<bits/stdc++.h>
using namespace std;

inline int read() {
    int ans = 0, f = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9') {
        if (ch == '-')f = -1;
        ch = getchar();
    }
    while (ch <= '9' && ch >= '0') {
        ans = ans * 10 + ch - '0';
        ch = getchar();
    }
    return ans * f;
}
const int N = 1e6+10;
int a[N];
int n;
void solve() {
    n = read();
    for (int i =1; i<= n; i++) {
        a[i] = read();
    }
    int ans = 0;
    for (int i = 1; i< n;) {
        int maxn = 0;
        if (a[i] == i) {
            i++;
            continue;
        }
        int j = i+1;
        maxn = a[i];
        while (j<=maxn) {
            maxn = max(a[j],maxn);
            j++;
        }
        j--;
        ans += j-i+1;
        i = j+1;
    }
    cout<<ans<<"\n";

}
int main() {
    int t=read();
    while (t--)
        solve();
    return 0;
}

posted @ 2025-03-15 19:45  Guaninf  阅读(18)  评论(0)    收藏  举报