rt,91pts,WA on #4,是哪里写挂了吗?
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
const int maxn = 2e5 + 10;
ll now = 0, cnt[maxn], ans[maxn], a[maxn], b[maxn];
int n, m, bh[maxn], L[maxn], R[maxn], id[maxn];
struct query {
int l, r, id;
bool operator<(const query& a) { return bh[l] != bh[a.l] ? bh[l] < bh[a.l] : r < a.r; }
}q[maxn];
inline void add(int x) {
now = max(now, ++cnt[id[x]]);
}
ll k[maxn];
ll solve(int l, int r) {
ll dis = 0;
for (int i = l; i <= r; i++)++k[id[i]], dis = max(dis, k[id[i]]);
for (int i = l; i <= r; i++)--k[id[i]];
return dis;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(); cout.tie();
cin >> n >> m;
int block = sqrt(n), all = ceil(n / block);
for (int i = 1; i <= n; i++) {
cin >> a[i]; b[i] = a[i];
}
sort(b + 1, b + 1 + n);
int d = n; d = unique(b + 1, b + 1 + n) - b - 1;
for (int i = 1; i <= n; i++) {
id[i] = lower_bound(b + 1, b + 1 + d, a[i]) - b;
}
for (int i = 1; i <= n; i++)bh[i] = (i - 1) / block + 1;
for (int i = 1; i <= all; i++) {
L[i] = R[i - 1] + 1, R[i] = L[i] + block;
if (R[i] > n) { R[i] = n; break; }
}
for (int i = 1; i <= m; i++) { cin >> q[i].l >> q[i].r; q[i].id = i; }
int l, r, right; int last = 0;
sort(q + 1, q + 1 + m); ll tmp = 0;
for (int i = 1; i <= m; i++) {
if (bh[q[i].l] == bh[q[i].r]) {
ans[q[i].id] = solve(q[i].l, q[i].r);
continue;
}
l = R[bh[q[i].l]] + 1;
if (bh[q[i].l] != last) {
for (int i = 1; i <= d; i++)cnt[i] = 0;
right = r = R[bh[q[i].l]];
tmp = now = 0;
}
while (r < q[i].r)add(++r);
tmp = now;
while (l > q[i].l)add(--l);
ans[q[i].id] = now;
while (l <= right)--cnt[id[l++]];
now = tmp;
last = bh[q[i].l];
}
for (int i = 1; i <= m; i++){
cout << ans[i] << endl;
}
return 0;
}