莫队求调 WA
查看原帖
莫队求调 WA
1006291
iwoeix楼主2023/7/26 17:30

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;
}
2023/7/26 17:30
加载中...