Advertisement
Guest User

Untitled

a guest
Feb 18th, 2020
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.18 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #define _USE_MATH_DEFINES
  3. #include "bits/stdc++.h"
  4. //#include <intrin.h>
  5.  
  6. #define fore(i,a,b) for(int i = a; i < (b); i++)
  7. #define fr(i,a,b) for(int i = a - 1; i >= b; i--)
  8. #define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
  9. #define N 300005
  10. #define inf 2000000000
  11. #define EPS 1e-6
  12. #define MOD (ll)1e15
  13. #define __builtin_popcount(x) __popcnt(x)
  14.  
  15. using namespace std;
  16.  
  17. typedef long long ll;
  18. typedef pair<int, int> pr;
  19. typedef pair<int, pair<int, int>> tup;
  20.  
  21. struct SegTree {
  22. vector<pair<pair<int, int>, pair<int, int>>> tree;
  23.  
  24. void resize(int n)
  25. {
  26. tree.resize(4 * n);
  27. }
  28.  
  29. void build(int l, int r, int v, vector<int> &a)
  30. {
  31. if (l == r)
  32. tree[v] = { {a[l], l}, {a[l], l} };
  33. else
  34. {
  35. int m = (r + l) / 2;
  36.  
  37. build(l, m, 2 * v, a);
  38. build(m + 1, r, 2 * v + 1, a);
  39.  
  40. tree[v].first = min(tree[2 * v].first, tree[2 * v + 1].first);
  41. tree[v].second = max(tree[2 * v].second, tree[2 * v + 1].second);
  42. }
  43. }
  44.  
  45. pair<pair<int, int>,pair<int,int>> query(int ql, int qr, int l, int r, int v)
  46. {
  47. if (ql > qr)
  48. return { {inf, -1}, {-inf, -1} };
  49. else if (ql == l && qr == r)
  50. return tree[v];
  51. else
  52. {
  53. int m = (r + l) / 2;
  54.  
  55. pair<pair<int, int>, pair<int, int>> res1 = query(ql, min(qr, m), l, m, 2 * v);
  56. pair<pair<int, int>, pair<int, int>> res2 = query(max(m + 1, ql), qr, m + 1, r, 2 * v + 1);
  57.  
  58. return { min(res1.first, res2.first), max(res1.second, res2.second) };
  59. }
  60. }
  61. };
  62.  
  63. inline void solve()
  64. {
  65. int n, m;
  66. cin >> n >> m;
  67. vector<int> v(n);
  68. fore(i, 0, n)
  69. cin >> v[i];
  70.  
  71. SegTree t;
  72. t.resize(n);
  73. t.build(0, n - 1, 1, v);
  74. fore(i, 0, m)
  75. {
  76. int l, r, q;
  77. cin >> l >> r >> q;
  78.  
  79. pair<pair<int, int>, pair<int, int>> res = t.query(l - 1, r - 1, 0, n - 1, 1);
  80.  
  81. if (res.first.first == q && res.second.first == q)
  82. cout << -1;
  83. else if (res.first.first != q)
  84. cout << res.first.second + 1;
  85. else
  86. cout << res.second.second + 1;
  87.  
  88. cout << '\n';
  89. }
  90. }
  91.  
  92. int main()
  93. {
  94. fast;
  95. #if defined(_DEBUG)
  96. freopen("input.txt", "r", stdin);
  97. freopen("output.txt", "w", stdout);
  98. #endif
  99. int q = 1;
  100. //cin >> q;
  101. while (q--)
  102. {
  103. solve();
  104. cout << '\n';
  105. }
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement