莫队求条,玄关,码风优良
查看原帖
莫队求条,玄关,码风优良
946909
Chase12345楼主2025/6/24 13:15

3030 分 WA+TLE

#include <bits/stdc++.h>
using namespace std;

const int N = 1e5 + 5;
int a[N], cnt[N], sizb, res[N];
struct query {
    int l, r, x, id;
    bool operator < (const query &o) const {
        if (l / sizb != o.l / sizb)
            return (l / sizb) < (o.l / sizb);
        if ((l / sizb) % 2 == 0)
            return r < o.r;
        else
            return r > o.r;
    }
} q[N];
map <int, int> mp;

void sol() {
    mp.clear();
    int n, m, cur = 0, l = 1, r = 0;
    cin >> n;
    sizb = sqrt(n);
    memset(cnt, 0, sizeof cnt);
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        mp[a[i]]++;
    }
    for (auto &p : mp)
        p.second = ++cur;
    for (int i = 1; i <= n; i++)
        a[i] = mp[a[i]];
    cin >> m;
    for (int i = 1; i <= m; i++) {
        cin >> q[i].l >> q[i].r >> q[i].x;
        q[i].id = i;
    }
    sort(q + 1, q + m + 1);
    for (int i = 1; i <= m; i++) {
        while (q[i].l < l)
            cnt[a[--l]]++;
        while (q[i].l > l)
            cnt[a[l++]]--;
        while (q[i].r < r)
            cnt[a[r--]]--;
        while (q[i].r > r)
            cnt[a[++r]]++;
        res[q[i].id] = cnt[q[i].x];
    }
    for (int i = 1; i <= m; i++)
        cout << res[i] << '\n';
}

int main() {
    int T;
    cin >> T;
    while (T--)
        sol();
}
2025/6/24 13:15
加载中...