建议加强数据 / Hack
查看原帖
建议加强数据 / Hack
723993
__ryp__楼主2024/5/16 15:27

本题可以用 O(nq)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;
}

2024/5/16 15:27
加载中...