Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2017
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.96 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. const int INF = 1e9;
  8.  
  9. void build (long long* segment_three, const long long a[], int v, int l, int r) {
  10. if (l == r) {
  11. segment_three[v] = a[l];
  12. } else {
  13. int m = (l + r) / 2;
  14. build (segment_three, a, v * 2, l, m);
  15. build (segment_three, a, v * 2 + 1, m + 1, r);
  16. segment_three[v] = max(segment_three[v * 2], segment_three[v * 2 + 1]);
  17. }
  18. }
  19.  
  20. long long get_max(long long segment_three[], int v, int tl, int tr, int l, int r) {
  21. if (l > r) {
  22. return -INF;
  23. }
  24. if (l == tl && r == tr) {
  25. return segment_three[v];
  26. }
  27. int mid = (tl + tr) / 2;
  28. return max(get_max(segment_three, v * 2, tl, mid, l, min(mid, r)),
  29. get_max(segment_three, v * 2 + 1, mid + 1, tr, max(l, mid + 1), r));
  30. }
  31.  
  32. void update(long long *segment_three, int v, int tl, int tr, int pos, int new_val) {
  33. if (tl == tr) {
  34. segment_three[v] = new_val;
  35. } else {
  36. int mid = (tl + tr) / 2;
  37. if (pos <= mid) {
  38. update(segment_three, v * 2, tl, mid, pos, new_val);
  39. } else {
  40. update(segment_three, v * 2 + 1, mid + 1, tr, pos, new_val);
  41. }
  42. segment_three[v] = max(segment_three[v * 2], segment_three[v * 2 + 1]);
  43. }
  44. }
  45.  
  46. int main() {
  47. ios::sync_with_stdio(false);
  48. cin.tie(nullptr);
  49. int n, m;
  50. cin >> n;
  51. long long data[n];
  52. long long segment_three[4 * n];
  53. for (int i = 0; i < 4 * n; ++i)
  54. segment_three[i] = -INF;
  55. for (int i = 0; i < n; ++i) {
  56. cin >> data[i];
  57. }
  58. build(segment_three, data, 1, 0, n - 1);
  59. int l, r, index;
  60. long long new_val;
  61. cin >> m;
  62. char k;
  63. for (int i = 0; i < m; ++i) {
  64. cin >> l >> r;
  65. l--;
  66. r--;
  67. if (l > r) {
  68. swap(l, r);
  69. }
  70. cout << get_max(segment_three, 1, 0, n - 1, l, r) << endl;
  71. }
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement