【字符串学习笔记】
点击查看代码
#include <bits/stdc++.h>
#define int long long
#define rep(i, a, b) for (int i = (a); i <= (b); ++i)
#define drep(i, a, b) for (int i = (a); i >= (b); --i)
#define clr(a) memset(a, 0, sizeof(a))
#define full(a) memset(a, 0x3f, sizeof(a))
#define INF 0x3f3f3f3f
#define FIN 0xc0c0c0c0
using namespace std;
inline int read() {
int a = 0, b = 1;char c = getchar();
while (c < '0' || c>'9') { if (c == '-') b = -1;c = getchar(); }
while (c >= '0' && c <= '9') { a = (a << 1) + (a << 3) + c - '0';c = getchar(); }
return a * b;
}
const int N = 3e5 + 5;
int n, a[N], st;
int min_show() {
int i = 0, j = 1, k = 0;
while (i < n && j < n && k < n) {
if (a[(i + k) % n] == a[(j + k) % n])
k++;
else {
if (a[(i + k) % n] > a[(j + k) % n])
i = i + k + 1;
else
j = j + k + 1;
if (i == j) i++;
k = 0;
}
}
return min(i, j);
}
signed main() {
n = read();
rep(i, 0, n - 1) a[i] = read();
st = min_show();
rep(i, 0, n - 1)
printf("%d ", a[(st + i) % n]);
return 0;
}