Advertisement
Guest User

Untitled

a guest
Feb 17th, 2020
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.79 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define MAXN (int)(2*1e5 + 1)
  5. #define F first
  6. #define S second
  7. #define endl "\n"
  8. #define MOD (lli)(1e9 + 7)
  9. #define lli long long int
  10. #define sz(a) int(a.size())
  11. #define DEBUG if(0) cout << "aqui" << endl;
  12. #define PI 2 * acos(0.0)
  13. typedef pair<int,int> ii;
  14. int dx[] = {1, -1, 0, 0};
  15. int dy[] = {0, 0, 1, -1};
  16. int dddx[] = {1, -1, 0, 0, 1, 1, -1, -1};
  17. int dddy[] = {0, 0, 1, -1, 1, -1, 1, -1};
  18.  
  19. int n, m;
  20. vector<int> vec(2*1010);
  21. vector<int> tree[8*1010];
  22.  
  23. void build(int node = 1, int start = 1, int end = n){
  24. if(start == end){
  25. tree[node].push_back(vec[start]);
  26. return ;
  27. }
  28.  
  29. int mid = (start + end) >> 1;
  30. build(2*node, start, mid);
  31. build(2*node+1, mid+1, end);
  32.  
  33.  
  34. tree[node].resize(sz(tree[2*node]) + sz(tree[2*node+1]));
  35. merge(tree[2*node].begin(), tree[2*node].end(), tree[2*node+1].begin(), tree[2*node+1].end(), tree[node].begin());
  36. }
  37.  
  38. int query(int l, int r, int k, int node = 1, int start = 1, int end = n){
  39. if(start > r or end < l) return 0;
  40. if(start >= l and end <= r) {
  41. int idx2 = upper_bound(tree[node].begin(), tree[node].end(), k) - tree[node].begin();
  42. int idx = lower_bound(tree[node].begin(), tree[node].end(), k) - tree[node].begin();
  43. // cout << idx << " " << idx2 << endl;
  44. return (idx2 - idx);
  45. }
  46. int mid = (start + end) >> 1;
  47. int p1 = query(l, r, k, 2*node, start, mid);
  48. int p2 = query(l, r, k, 2*node+1, mid+1, end);
  49.  
  50. return p1+p2;
  51. }
  52.  
  53. int main(){
  54. ios_base::sync_with_stdio(false);
  55. cin.tie(NULL);
  56.  
  57. cin >> n >> m;
  58.  
  59. for(int i=1;i<=n;i++) {
  60. int a;
  61. cin >> a;
  62. vec[i] = a%m;
  63. }
  64.  
  65. int q;
  66. cin >> q;
  67. build();
  68.  
  69. while(q--){
  70. int l, r, d;
  71. cin >> l >> r >> d;
  72. cout << query(l, r, d) << endl;
  73. }
  74.  
  75.  
  76.  
  77. return 0;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement