题目描述:
开始时全是OOO....n个O, 每次从左到右遍历,如果发现出现XO的情况就调换位置,依次循环 直到不能调换了,并且下次开始时又会回到起初的状态,并且有a1,a2,,,,,,an,表示地i次的a[i]位置变为X,保证不重复;
问你 第0次到第n次每次循环了几次
#include<bits/stdc++.h>
using namespace std;
const int MAX=3e5;
int a[MAX];
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    cout<<1;
    int p[MAX],j=n;
    memset(p,0,sizeof(p));
    for(int i=1;i<=n;i++){
        p[a[i]]=1;
        if(a[i]==j){
             j=a[i];
            while(--j>=0&&p[j]);//注意点  否则会超时
        }
        cout<<' '<<i-n+j+1;
    }
    cout<<endl;
}