rt,样例过了
#include <bits/stdc++.h>
using namespace std;
using uint = unsigned int;
const uint N = 30005, B = 174, M = 200005, S = 1000005;
auto block = [](uint x) { return (x - 1) / B; };
uint n, m, a[N], cnt[S], ans[M];
struct Query { uint l, r, idx; } q[M];
int main()
{
cin >> n;
for (uint i = 0; i < n; cin >> a[++i]);
cin >> m;
for (uint i = 0; i < m; cin >> q[i].l >> q[i].r, q[i++].idx = i);
sort(q, q + m, [](Query a, Query b) { return block(a.l) ^ block(b.l) ? a.l < b.l : block(a.l) & 1 ? a.r < b.r : a.r > b.r; });
for (uint i = 0, l = 1, r = 0, k = 0; i < m; ans[q[i++].idx] = k)
{
while (l > q[i].l) k += !(cnt[a[--l]]++);
while (r < q[i].r) k += !(cnt[a[++r]]++);
while (l < q[i].l) k -= !(--cnt[a[l++]]);
while (r > q[i].r) k -= !(--cnt[a[r--]]);
}
for (uint i = 0; i < m; cout << ans[i++] << '\n');
return 0;
}