题解:P10814 【模板】离线二维数点
我们考虑一个
考虑对每个
const int N = 2e6 + 19;
struct node {
int k, id, x, val;
bool operator < (const node &a) const {
return k < a.k;
}
} q[N << 1];
int a[N], cnt, ans[N];
struct BinaryTree {
int t[N];
void add(int x) {
while (x < N) {
t[x]++;
x += lowbit(x);
}
}
int query(int x) {
int res = 0;
while (x) {
res += t[x];
x -= lowbit(x);
}
return res;
}
} bit;
signed main() {
int n = read(), m = read();
for (int i = 1; i <= n; ++i) {
read(a[i]);
}
for (int i = 1; i <= m; ++i) {
int l, r, x; read(l, r, x);
q[++cnt] = {l-1, i, x, -1};
q[++cnt] = {r, i, x, 1};
}
sort(q + 1, q + 1 + cnt);
for (int i = 1, j = 1; i <= cnt; ++i) {
for (; j <= q[i].k; ++j) bit.add(a[j]);
ans[q[i].id] += q[i].val * bit.query(q[i].x);
}
for (int i = 1; i <= m; ++i) write(ans[i]);
return 0;
}