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