本题可以用 O(nq) 的优秀复杂度通过。如下:
#include <iostream>
using namespace std;
const int N = 1e5 + 10;
int nxt[N], last[15], z[N];
void sub (void)
{
int n, q;
cin >> n;
for (int i = 1; i <= n; i++) nxt[i] = 0;
for (int i = 0; i < 15; i++) last[i] = 0;
for (int i = 1; i <= n; i++) cin >> z[i], nxt[last[z[i]]] = i, last[z[i]] = i;
nxt[0] = 0;
cin >> q;
while (q--) {
int l, r, res, q;
cin >> l >> r, res = r - l + 1;
for (int i = l; i <= r; i = q + 1)
if (nxt[i] && nxt[i] <= r) q = nxt[i], res -= q - i + 1;
else q = i;
cout << res << '\n';
}
}
int main (void)
{
int t;
ios::sync_with_stdio (false), cin.tie (0), cout.tie (0);
cin >> t;
while (t--) sub ();
return 0;
}
以下是 Hack(generator)
#include <iostream>
using namespace std;
int main (void)
{
int n, q;
ios::sync_with_stdio (false), cin.tie (0), cout.tie (0);
cout << "5\n";
for (int i = 0; i < 5; i++) {
n = 1.5e4, q = 1.5e4;
cout << n << '\n';
for (int i = 0; i < n; i++) cout << "1" << " \n"[i == n - 1];
cout << q << '\n';
for (int i = 0; i < q; i++) cout << "1 " << n << '\n';
}
return 0;
}