# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
487612 | KazamaHoang | Poklon (COCI17_poklon) | C++14 | 396 ms | 42196 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
struct FenwickTree {
int n;
vector<int> tree;
FenwickTree(int _n = 0) {
n = _n;
tree.resize(n+5, 0);
}
void update(int x, int sign) {
for (; x; x -= x & -x)
tree[x] += sign;
}
int get(int x) {
int res = 0;
for (; x <= n; x += x & -x)
res += tree[x];
return res;
}
};
int n, q, a[500005];
int last[500005], pre[500005], l[500005], r[500005], ans[500005];
vector<int> qry[500005];
void compress() {
vector<int> vt(a + 1, a + 1 + n);
sort(vt.begin(), vt.end());
vt.resize(unique(vt.begin(), vt.end()) - vt.begin());
for (int i = 1; i <= n; ++ i)
a[i] = upper_bound(vt.begin(), vt.end(), a[i]) - vt.begin();
}
int main() {
cin.tie(0)->sync_with_stdio(0);
cin >> n >> q;
for (int i = 1; i <= n; ++ i)
cin >> a[i];
compress();
FenwickTree ft(n);
for (int i = 1; i <= q; ++ i) {
cin >> l[i] >> r[i];
qry[r[i]].push_back(i);
}
for (int i = 1; i <= n; ++ i) {
if (pre[last[a[i]]]) {
ft.update(pre[last[a[i]]], -1);
ft.update(pre[pre[last[a[i]]]], 1);
}
if (last[a[i]]) {
ft.update(last[a[i]], 1);
ft.update(pre[last[a[i]]], -1);
}
pre[i] = last[a[i]];
last[a[i]] = i;
for (int& id : qry[i])
ans[id] = ft.get(l[id]);
}
for (int i = 1; i <= q; ++ i)
cout << ans[i] << "\n";
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |