This documentation is automatically generated by competitive-verifier/competitive-verifier
// competitive-verifier: PROBLEM https://www.hackerrank.com/contests/happy-query-contest/challenges/range-counting-query
// competitive-verifier: TLE 0.5
// competitive-verifier: MLE 64
#include <iostream>
#include <vector>
#include "src/Misc/Mo.hpp"
using namespace std;
signed main() {
cin.tie(0);
ios::sync_with_stdio(0);
int N;
cin >> N;
vector<int> A(N), cnt(N), sum(N + 2);
for (int i= 0; i < N; i++) cin >> A[i], A[i]--;
Mo mo;
int Q;
cin >> Q;
vector<int> x(Q), y(Q), ans(Q);
for (int q= 0; q < Q; q++) {
int l, r;
cin >> l >> r >> x[q] >> y[q];
mo.query(--l, r);
}
auto add= [&](int k) { sum[++cnt[A[k]]]++; };
auto erase= [&](int k) { sum[cnt[A[k]]--]--; };
auto out= [&](int q) { ans[q]= sum[x[q]] - sum[y[q] + 1]; };
mo.run(add, erase, out);
for (int q= 0; q < Q; q++) cout << ans[q] << '\n';
return 0;
}
#line 1 "test/hackerrank/range-counting-query.Mo.test.cpp"
// competitive-verifier: PROBLEM https://www.hackerrank.com/contests/happy-query-contest/challenges/range-counting-query
// competitive-verifier: TLE 0.5
// competitive-verifier: MLE 64
#include <iostream>
#include <vector>
#line 3 "src/Misc/Mo.hpp"
#include <algorithm>
#include <numeric>
#include <cmath>
struct Mo {
std::vector<int> L, R;
Mo() {}
void query(int l, int r) { L.push_back(l), R.push_back(r); } /* [l, r) */
template <typename AL, typename AR, typename EL, typename ER, typename O> void run(const AL &add_left, const AR &add_right, const EL &erase_left, const ER &erase_right, const O &out) {
int q= L.size(), n= *std::max_element(R.begin(), R.end()), bs= n / std::min<int>(n, std::sqrt(q));
std::vector<int> ord(q);
std::iota(ord.begin(), ord.end(), 0), std::sort(ord.begin(), ord.end(), [&](int a, int b) {
int ablk= L[a] / bs, bblk= L[b] / bs;
return ablk != bblk ? ablk < bblk : (ablk & 1) ? R[a] > R[b] : R[a] < R[b];
});
int l= 0, r= 0;
for (auto i: ord) {
while (l > L[i]) add_left(--l);
while (r < R[i]) add_right(r++);
while (l < L[i]) erase_left(l++);
while (r > R[i]) erase_right(--r);
out(i);
}
}
template <typename A, typename E, typename O> void run(const A &add, const E &erase, const O &out) { run(add, add, erase, erase, out); }
};
#line 7 "test/hackerrank/range-counting-query.Mo.test.cpp"
using namespace std;
signed main() {
cin.tie(0);
ios::sync_with_stdio(0);
int N;
cin >> N;
vector<int> A(N), cnt(N), sum(N + 2);
for (int i= 0; i < N; i++) cin >> A[i], A[i]--;
Mo mo;
int Q;
cin >> Q;
vector<int> x(Q), y(Q), ans(Q);
for (int q= 0; q < Q; q++) {
int l, r;
cin >> l >> r >> x[q] >> y[q];
mo.query(--l, r);
}
auto add= [&](int k) { sum[++cnt[A[k]]]++; };
auto erase= [&](int k) { sum[cnt[A[k]]--]--; };
auto out= [&](int q) { ans[q]= sum[x[q]] - sum[y[q] + 1]; };
mo.run(add, erase, out);
for (int q= 0; q < Q; q++) cout << ans[q] << '\n';
return 0;
}
Env | Name | Status | Elapsed | Memory |
---|---|---|---|---|
g++-13 | 000 |
![]() |
5 ms | 4 MB |
g++-13 | 001 |
![]() |
114 ms | 7 MB |
g++-13 | 002 |
![]() |
114 ms | 7 MB |
g++-13 | 003 |
![]() |
114 ms | 7 MB |
g++-13 | 004 |
![]() |
117 ms | 7 MB |
g++-13 | 005 |
![]() |
117 ms | 7 MB |
g++-13 | 006 |
![]() |
117 ms | 7 MB |
g++-13 | 007 |
![]() |
95 ms | 7 MB |
g++-13 | 008 |
![]() |
96 ms | 7 MB |
g++-13 | 009 |
![]() |
70 ms | 6 MB |
g++-13 | 010 |
![]() |
52 ms | 5 MB |
g++-13 | 011 |
![]() |
50 ms | 5 MB |
g++-13 | 012 |
![]() |
62 ms | 6 MB |
g++-13 | 013 |
![]() |
53 ms | 5 MB |
g++-13 | 014 |
![]() |
47 ms | 6 MB |
g++-13 | 015 |
![]() |
57 ms | 6 MB |
g++-13 | 016 |
![]() |
90 ms | 6 MB |
g++-13 | 017 |
![]() |
79 ms | 6 MB |
g++-13 | 018 |
![]() |
66 ms | 6 MB |
g++-13 | 019 |
![]() |
54 ms | 5 MB |
g++-13 | 020 |
![]() |
69 ms | 6 MB |
g++-13 | 021 |
![]() |
48 ms | 5 MB |
g++-13 | 022 |
![]() |
93 ms | 6 MB |
g++-13 | 023 |
![]() |
98 ms | 7 MB |
g++-13 | 024 |
![]() |
97 ms | 7 MB |
g++-13 | 025 |
![]() |
108 ms | 7 MB |
g++-13 | 026 |
![]() |
109 ms | 7 MB |
g++-13 | 027 |
![]() |
109 ms | 7 MB |
clang++-18 | 000 |
![]() |
5 ms | 4 MB |
clang++-18 | 001 |
![]() |
120 ms | 7 MB |
clang++-18 | 002 |
![]() |
120 ms | 7 MB |
clang++-18 | 003 |
![]() |
119 ms | 7 MB |
clang++-18 | 004 |
![]() |
127 ms | 7 MB |
clang++-18 | 005 |
![]() |
127 ms | 7 MB |
clang++-18 | 006 |
![]() |
126 ms | 7 MB |
clang++-18 | 007 |
![]() |
97 ms | 7 MB |
clang++-18 | 008 |
![]() |
93 ms | 7 MB |
clang++-18 | 009 |
![]() |
73 ms | 6 MB |
clang++-18 | 010 |
![]() |
55 ms | 5 MB |
clang++-18 | 011 |
![]() |
53 ms | 5 MB |
clang++-18 | 012 |
![]() |
62 ms | 6 MB |
clang++-18 | 013 |
![]() |
56 ms | 5 MB |
clang++-18 | 014 |
![]() |
47 ms | 6 MB |
clang++-18 | 015 |
![]() |
58 ms | 6 MB |
clang++-18 | 016 |
![]() |
93 ms | 6 MB |
clang++-18 | 017 |
![]() |
85 ms | 6 MB |
clang++-18 | 018 |
![]() |
71 ms | 6 MB |
clang++-18 | 019 |
![]() |
58 ms | 5 MB |
clang++-18 | 020 |
![]() |
65 ms | 6 MB |
clang++-18 | 021 |
![]() |
46 ms | 5 MB |
clang++-18 | 022 |
![]() |
88 ms | 7 MB |
clang++-18 | 023 |
![]() |
93 ms | 7 MB |
clang++-18 | 024 |
![]() |
93 ms | 7 MB |
clang++-18 | 025 |
![]() |
102 ms | 7 MB |
clang++-18 | 026 |
![]() |
106 ms | 7 MB |
clang++-18 | 027 |
![]() |
103 ms | 7 MB |