WA on #8,实在调不出来了。。。
#include<bits/stdc++.h>
#define int long long
#define rep(i,a,b) for(register int i=(a);i<=(b);++i)
#define per(i,a,b) for(register int i=(a);i>=(b);--i)
#define pi pair<int,int>
#define mkp(a,b) make_pair((a),(b))
#define IOS cin.tie(0)->sync_with_stdio(0);
using namespace std;
const int N = 1e6 + 15, M = 1e3 + 15;
const int I_LOVE_CCF = 1;
int n, t, len, m2;
int a[N], b[N], id[N];
int l[N], r[N], pos[N];
int cnt[N], m[M][M];
int sum[M][M * 10];
inline int read () {
int x = 0, f = 1;
char ch = getchar ();
while (!isdigit (ch)) {
if (ch == '-') f = -1;
ch = getchar ();
}
while (isdigit (ch)) {
x = (x << 1) + (x << 3) + (ch ^ 48);
ch = getchar ();
}
return x * f;
}
void init () {
rep (i, 1, t) {
l[i] = r[i - 1] + 1;
r[i] = i * t;
}
if (r[t] < n) {
r[t] = n;
l[t] = r[t - 1] + 1;
}
rep (i, 1, t) {
rep (j, l[i], r[i]) {
pos[j] = i;
sum[i][a[j]] ++;
}
rep (j, 1, len) {
sum[i][j] += sum[i - 1][j];
}
}
rep (i, 1, t) {
rep (j, i, t) {
m[i][j] = m[i][j - 1];
rep (k, l[j], r[j]) {
if ((sum[j][a[k]] - sum[i - 1][a[k]] > sum[j][m[i][j]] - sum[i - 1][m[i][j]]) || (sum[j][a[k]] - sum[i - 1][a[k]] == sum[j][m[i][j]] - sum[i - 1][m[i][j]] && a[k] < m[i][j])) {
m[i][j] = a[k];
}
}
}
}
}
int query (int ll, int rr) {
int p = pos[ll], q = pos[rr];
int ans = 0;
if (q - p <= 1) {
rep (i, ll, rr) {
cnt[a[i]] ++;
}
rep (i, ll, rr) {
if ((cnt[a[i]] > cnt[ans]) || (cnt[a[i]] == cnt[ans] && a[i] < ans)) {
ans = a[i];
}
}
rep (i, ll, rr) {
cnt[a[i]] = 0;
}
return b[ans];
}
rep (i, ll, r[p]) {
cnt[a[i]] ++;
}
rep (i, l[q], rr) {
cnt[a[i]] ++;
}
ans = m[p + 1][q - 1];
rep (i, ll, r[p]) {
int now = cnt[a[i]] + sum[q - 1][a[i]] - sum[p][a[i]];
int pre = cnt[ans] + sum[q - 1][ans] - sum[p][ans];
if ((now > pre) || (now == pre && ans > a[i])) {
ans = a[i];
}
}
rep (i, l[q], rr) {
int now = cnt[a[i]] + sum[q - 1][a[i]] - sum[p][a[i]];
int pre = cnt[ans] + sum[q - 1][ans] - sum[p][ans];
if ((now > pre) || (now == pre && ans > a[i])) {
ans = a[i];
}
}
rep (i, ll, r[p]) {
cnt[a[i]] = 0;
}
rep (i, l[q], rr) {
cnt[a[i]] = 0;
}
return b[ans];
}
signed main () {
// freopen ("P4168_8.in", "r", stdin);
// freopen ("P4168....8.out", "w", stdout);
n = read ();
m2 = read ();
t = 2 * sqrt (n);
rep (i, 1, n) b[i] = a[i] = read ();
sort (b + 1, b + n + 1);
len = unique (b + 1, b + n + 1) - b - 1;
rep (i, 1, n) {
id[i] = lower_bound (b + 1, b + len + 1, a[i]) - b;
a[i] = id[i];
}
init ();
int x = 0;
while (m2 --) {
int l = read (), r = read ();
l = (l + x - 1) % n + 1, r = (r + x - 1) % n + 1;
if (l > r) swap (l, r);
x = query (l, r);
cout << x << endl;
}
return 0;
}
可能码风有点奇怪,不过还请帮忙改改吧。