Advertisement
Guest User

Untitled

a guest
Mar 17th, 2018
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.96 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2.  
  3.  
  4. #include <iostream>
  5. #include <vector>
  6. #include <algorithm>
  7. using namespace std;
  8. const long long int n = 131072;
  9. vector<long long int> tree_min(2 * n);
  10. vector<long long int> tree_max(2 * n);
  11. const long long int MAX_INT = 1000000000;
  12. const long long int MIN_INT = -1000000000;
  13.  
  14.  
  15. long long int get_min(int v, int vl, int vr, int l, int r) {
  16.     if (l > r) return MAX_INT;
  17.     if (l == vl and r == vr) return tree_min[v];
  18.     int vm = (vr + vl) / 2;
  19.     return min(get_min(v * 2, vl, vm, l, min(vm, r)), get_min(v * 2 + 1, vm + 1, vr, max(l, vm + 1), r));
  20. }
  21.  
  22. long long int get_max(int v, int vl, int vr, int l, int r) {
  23.     if (l > r) return MIN_INT;
  24.     if (l == vl and r == vr) return tree_max[v];
  25.     int vm = (vr + vl) / 2;
  26.     return max(get_max(v * 2, vl, vm, l, min(vm, r)), get_max(v * 2 + 1, vm + 1, vr, max(l, vm + 1), r));
  27. }
  28.  
  29. void update(int ind, int val) {
  30.     tree_min[ind + n] = val;
  31.     tree_max[ind + n] = val;
  32.     ind += n;
  33.     ind /= 2;
  34.     while (ind >= 1) {
  35.         tree_min[ind] = min(tree_min[2 * ind], tree_min[2 * ind + 1]);
  36.         tree_max[ind] = max(tree_max[2 * ind], tree_max[2 * ind + 1]);
  37.         ind /= 2;
  38.     }
  39. }
  40.  
  41.  
  42. int main() {
  43.     freopen("rvq.in", "r", stdin);
  44.     freopen("rvq.out", "w", stdout);
  45.     for (int i = 0; i < n; i++) {
  46.         tree_min[i + n] = (i * i) % 12345 + (i * i * i) % 23456;
  47.         tree_max[i + n] = tree_min[i + n];
  48.     }
  49.     for (int i = n - 1; i >= 1; i--) {
  50.         tree_min[i] = min(tree_min[2 * i], tree_min[2 * i + 1]);
  51.         tree_max[i] = max(tree_max[2 * i], tree_max[2 * i + 1]);
  52.     }
  53.     int k, t1, t2, ans1, ans2;
  54.     cin >> k;
  55.     for (int i = 0; i < k; i++) {
  56.         cin >> t1 >> t2;
  57.         if (t1 > 0) {
  58.             ans1 = get_max(1, 0, n - 1, t1, t2);
  59.             ans2 = get_min(1, 0, n - 1, t1, t2);
  60.             cout << ans1 - ans2 << "\n";
  61.         }
  62.         else {
  63.             update(-t1, t2);
  64.         }
  65.     }
  66.     return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement