fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef long long ll;
  5. typedef pair<int, int> ii;
  6.  
  7. const int INF = 1e9;
  8. const ll LINF = 1e18;
  9.  
  10. const int N = 3e4 + 5;
  11.  
  12. int n, q;
  13. int a[N];
  14.  
  15. vector<int> seg[4 * N]; // seg[id] = vector chứa các phần tử thuộc đoạn [l, r] theo thứ tự tăng dần
  16.  
  17. void build(int id, int l, int r) {
  18. if (l == r) {
  19. seg[id].push_back(a[l]);
  20. return;
  21. }
  22. int mid = (l + r) >> 1;
  23. build(id * 2, l, mid);
  24. build(id * 2 + 1, mid + 1, r);
  25. merge(seg[id * 2].begin(), seg[id * 2].end(), seg[id * 2 + 1].begin(), seg[id * 2 + 1].end(), back_inserter(seg[id]));
  26. }
  27.  
  28. int get(int id, int l, int r, int u, int v, int k) {
  29. if (l > v || r < u) return 0;
  30.  
  31. if (u <= l && r <= v) {
  32. int pos = upper_bound(seg[id].begin(), seg[id].end(), k) - seg[id].begin();
  33. return seg[id].size() - pos;
  34. }
  35.  
  36. int mid = (l + r) >> 1;
  37. return get(id * 2, l, mid, u, v, k) + get(id * 2 + 1, mid + 1, r, u, v, k);
  38. }
  39.  
  40. int main() {
  41. ios::sync_with_stdio(0); cin.tie(0);
  42. cin >> n;
  43. for (int i = 1; i <= n; i++) cin >> a[i];
  44.  
  45. build(1, 1, n);
  46.  
  47. cin >> q;
  48. while (q--) {
  49. int i, j, k;
  50. cin >> i >> j >> k;
  51. cout << get(1, 1, n, i, j, k) << '\n';
  52. }
  53. }
  54.  
Success #stdin #stdout 0.01s 6484KB
stdin
5
5 1 2 3 4
3
2 4 1
4 4 4
1 5 2
stdout
2
0
3