题目描述:
开始时全是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;
}

京公网安备 11010502036488号