
#define ll long long
using namespace std;
int a[600005];
int main() {
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
a[i+n]=a[i];
}
int i=1;
int j=i+1;
int pos;
while(i<=n&&j<=n){
int k;
for(k=0;a[i+k]==a[j+k];k++);
if(a[i+k]>a[j+k]){
i=i+k+1;
}
else{
j=j+k+1;
}
if(i==j){
j++;
}
}
pos=min(i,j);
for(int i=pos;i<=pos+n-1;i++){
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}
每次跳都是k+1,时间复杂度O(n),可以这么跳的原因是试着去模拟手跑一下样例,然后就能发现如果一个一个的移,在过程中就能发现这都是原来判断过的所以没必要