Advertisement
Guest User

Untitled

a guest
Feb 21st, 2020
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.53 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define ll int
  4. #define dl double long
  5. #define foru(i, a, b) for (ll i = a; i < b; ++i)
  6. #define ford(i, a, b) for (ll i = a; i >= b; --i)
  7. #define pb push_back
  8. #define ppb pop_back
  9. #define X first
  10. #define C second
  11.  
  12. /**#pragma GCC diagnostic error "-std=c++17"
  13. #pragma GCC target("avx")
  14. #pragma GCC optimize(3)
  15. #pragma GCC optimize("Ofast")
  16. #pragma GCC optimize("inline")
  17. #pragma GCC optimize("-fgcse")
  18. #pragma GCC optimize("-fgcse-lm")
  19. #pragma GCC optimize("-fipa-sra")
  20. #pragma GCC optimize("-ftree-pre")
  21. #pragma GCC optimize("-ftree-vrp")
  22. #pragma GCC optimize("-fpeephole2")
  23. #pragma GCC optimize("-ffast-math")
  24. #pragma GCC optimize("-fsched-spec")
  25. #pragma GCC optimize("unroll-loops")
  26. #pragma GCC optimize("-falign-jumps")
  27. #pragma GCC optimize("-falign-loops")
  28. #pragma GCC optimize("-falign-labels")
  29. #pragma GCC optimize("-fdevirtualize")
  30. #pragma GCC optimize("-fcaller-saves")
  31. #pragma GCC optimize("-fcrossjumping")
  32. #pragma GCC optimize("-fthread-jumps")
  33. #pragma GCC optimize("-funroll-loops")
  34. #pragma GCC optimize("-fwhole-program")
  35. #pragma GCC optimize("-freorder-blocks")
  36. #pragma GCC optimize("-fschedule-insns")
  37. #pragma GCC optimize("inline-functions")
  38. #pragma GCC optimize("-ftree-tail-merge")
  39. #pragma GCC optimize("-fschedule-insns2")
  40. #pragma GCC optimize("-fstrict-aliasing")
  41. #pragma GCC optimize("-fstrict-overflow")
  42. #pragma GCC optimize("-falign-functions")
  43. #pragma GCC optimize("-fcse-skip-blocks")
  44. #pragma GCC optimize("-fcse-follow-jumps")
  45. #pragma GCC optimize("-fsched-interblock")
  46. #pragma GCC optimize("-fpartial-inlining")
  47. #pragma GCC optimize("no-stack-protector")
  48. #pragma GCC optimize("-freorder-functions")
  49. #pragma GCC optimize("-findirect-inlining")
  50. #pragma GCC optimize("-fhoist-adjacent-loads")
  51. #pragma GCC optimize("-frerun-cse-after-loop")
  52. #pragma GCC optimize("inline-small-functions")
  53. #pragma GCC optimize("-finline-small-functions")
  54. #pragma GCC optimize("-ftree-switch-conversion")
  55. #pragma GCC optimize("-foptimize-sibling-calls")
  56. #pragma GCC optimize("-fexpensive-optimizations")
  57. #pragma GCC optimize("-funsafe-loop-optimizations")
  58. #pragma GCC optimize("inline-functions-called-once")
  59. #pragma GCC optimize("-fdelete-null-pointer-checks")
  60. #define _CRT_SECURE_NO_WARNINGS
  61. #pragma GCC optimize("Ofast")
  62. #pragma GCC optimize("no-stack-protector")
  63. #pragma GCC optimize("unroll-loops")
  64. #pragma GCC target("sse,sse2,sse3,ssse3,popcnt,abm,mmx,tune=native")
  65. #pragma GCC optimize("fast-math")
  66. #pragma warning(disable:4996) // */
  67.  
  68. #pragma GCC optimize("no-stack-protector")
  69. #pragma comment(linker, "/STACK:256000000")
  70.  
  71. using namespace std;
  72.  
  73. namespace {
  74. const ll INF = 1e6 + 7, ZERO = 0;
  75. const dl EPS = 1e-7;
  76. ll n;
  77. vector<ll> arr;
  78. }
  79.  
  80. struct Node{
  81. ll x, id, add;
  82. };
  83.  
  84. vector<Node> tree;
  85.  
  86. void relax(ll v, ll l, ll r) {
  87. if (tree[v * 2].x > tree[v * 2 + 1].x) {
  88. tree[v].id = tree[v * 2].id;
  89. } else {
  90. tree[v].id = tree[v * 2 + 1].id;
  91. }
  92. tree[v].x = max(tree[v * 2].x, tree[v * 2 + 1].x);
  93. }
  94.  
  95. void build(ll v, ll l, ll r) {
  96. if (r - l == 1) {
  97. tree[v].x = arr[l];
  98. tree[v].id = r;
  99. return;
  100. }
  101. ll m = (r + l) / 2;
  102. build(v * 2, l, m);
  103. build(v * 2 + 1, m, r);
  104. relax(v, l, r);
  105. }
  106.  
  107. void push(ll v, ll l, ll r) {
  108. ll add = tree[v].add;
  109. tree[v].add = 0;
  110. tree[v * 2].x += add;
  111. tree[v * 2].add += add;
  112. tree[v * 2 + 1].x += add;
  113. tree[v * 2 + 1].add += add;
  114. }
  115.  
  116. pair<ll, ll> get(ll v, ll l, ll r, ll ql, ll qr) {
  117. if (l >= qr || r <= ql) {
  118. return {-1, -1};
  119. }
  120. if (l >= ql && r <= qr) {
  121. return {tree[v].x, tree[v].id};
  122. }
  123. ll m = (r + l) / 2;
  124. push(v, l, r);
  125. return max(get(v * 2, l, m, ql, qr), get(v * 2 + 1, m, r, ql, qr));
  126. }
  127.  
  128. void upd(ll v, ll l, ll r, ll ql, ll qr, ll d) {
  129. if (l >= qr || r <= ql) {
  130. return;
  131. }
  132. if (l >= ql && r <= qr) {
  133. tree[v].x += d;
  134. tree[v].add += d;
  135. return;
  136. }
  137. ll m = (r + l) / 2;
  138. upd(v * 2, l, m, ql, qr, d);
  139. upd(v * 2 + 1, m, r, ql, qr, d);
  140. relax(v, l, r);
  141. }
  142.  
  143. int main() {
  144. // freopen("in.txt", "r", stdin);
  145. // freopen("out.txt", "w", stdout);
  146. ios_base::sync_with_stdio(false);
  147. cin.tie(0);
  148. cout.tie(0);
  149.  
  150. cin >> n;
  151. tree.resize(4 * n);
  152. arr.resize(n);
  153. foru(i, 0, n) {
  154. cin >> arr[i];
  155. }
  156. build(1, 0, n);
  157. ll m;
  158. cin >> m;
  159. foru(i, 0, m) {
  160. ll x, y;
  161. cin >> x >> y;
  162. cout << get(1, 1, n, x - 1, y).C << endl;
  163. }
  164.  
  165. return 0;
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement