#include <iostream>
#include <algorithm>
#include <cmath>
#define MAXN 120000
#define QWQ cout << "qwq" << endl;
using namespace std;
int n, m, CCC, cnt;
int a[MAXN + 10];
int pl[MAXN + 10], pr[MAXN + 10], cl[MAXN + 10], len;
int c[50 + 10][50 + 10][MAXN + 10];
int f[50 + 10][50 + 10];
int ans;
void qwq(int l, int r, int num) {
if(c[l][r][num] == 0) {c[l][r][num]++; return ;}
else if(c[l][r][num] % 2 == 0) ans--;
else ans++;
c[l][r][num]++;
}
int solve(int l, int r) {
int L = cl[l], R = cl[r];
int x = 0, y = 0;
if(L + 1 <= R - 1) x = L + 1, y = R - 1;
ans = f[x][y];
if(L == R) {
for(int p = l; p <= r; p++) qwq(x, y, a[p]);
for(int p = l; p <= r; p++) c[x][y][a[p]]--;
}
else {
for(int p = l; p <= pr[L]; p++) qwq(x, y, a[p]);
for(int p = pl[R]; p <= r; p++) qwq(x, y, a[p]);
for(int p = l; p <= pr[L]; p++) c[x][y][a[p]]--;
for(int p = pl[R]; p <= r; p++) c[x][y][a[p]]--;
}
return ans;
}
void block() {
len = pow(double(n), 0.666666);
for(int p = 1; p <= ceil(n * 1.0 / len); p++) {
pl[p] = (p - 1) * len + 1;
pr[p] = p * len;
}
for(int p = 1; p <= n; p++)
cl[p] = (p - 1) / len + 1;
for(int p = 1; p <= ceil(n * 1.0 / len); p++)
for(int i = p; i <= ceil(n * 1.0 / len); i++) {
for(int j = pl[p]; j <= pr[i]; j++) c[p][i][a[j]]++;
for(int j = 0; j <= CCC; j++)
if((c[p][i][j] % 2 == 0) && c[p][i][j]) f[p][i]++;
}
}
int main() {
//freopen("test.txt", "r", stdin);
//freopen("taxt.txt", "w", stdout);
cin >> n >> CCC >> m;
for(int p = 1; p <= n; p++) cin >> a[p];
block();
int last = 0;
while(m--) {
int x, y;
cin >> x >> y;
x = (x + last) % n + 1, y = (y + last) % n + 1;
if(x > y) swap(x, y);
last = solve(x, y);
cout << last << endl;
}
}
问题就在于,这玩意儿 MLE 了/kk