Advertisement
TheKabeton

Untitled

Nov 15th, 2020
1,601
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.80 KB | None | 0 0
  1. /*-------------------- Code written by Kabeton --------------------*/
  2. /*--- Contacts: https://vk.com/kabeton and TheKabeton@yandex.ru ---*/
  3.  
  4. #define _USE_MATH_DEFINES
  5. #include <iostream>
  6. #include <iomanip>
  7. #include <cstdio>
  8. #include <cstdlib>
  9. #include <cmath>
  10. #include <algorithm>
  11. #include <vector>
  12. #include <map>
  13. #include <unordered_map>
  14. #include <set>
  15. #include <bitset>
  16. #include <tuple>
  17. #include <queue>
  18. #include <stack>
  19. #include <valarray>
  20. #include <sstream>
  21. #include <cstring>
  22. #include <numeric>
  23. #include <ctime>
  24. #include <cassert>
  25.  
  26. #define endl "\n"
  27. #define re return
  28. #define fi first
  29. #define se second
  30.  
  31. typedef long long ll;
  32. typedef unsigned long long ull;
  33. typedef long double ld;
  34.  
  35. const ll mod = 1e9 + 7;
  36.  
  37. using namespace std;
  38.  
  39. vector<ll> dmx(4 * 110000);
  40. vector<ll> dmn(4 * 110000);
  41.  
  42. void build(const vector<ll>& v, ll ind, ll left, ll right, ll f(ll, ll), vector<ll>& d) {
  43.     if (left == right) {
  44.         d[ind] = v[left];
  45.     } else {
  46.         ll mid = (left + right) / 2;
  47.         build(v, ind * 2, left, mid, f, d);
  48.         build(v, ind * 2 + 1, mid + 1, right, f, d);
  49.         d[ind] = f(d[ind * 2], d[ind * 2 + 1]);
  50.     }
  51. }
  52.  
  53. ll mx(ll v, ll left, ll right, ll l, ll r, ll f(ll, ll), vector<ll>& d, bool m) {
  54.     if (l > r) {
  55.         if (m) {
  56.             re -100000000;
  57.         } else {
  58.             re 100000000;
  59.         }
  60.     }
  61.     if (left == l && right == r) re d[v];
  62.     ll mid = (left + right) / 2;
  63.     re f(mx(v*2, left, mid, l, min(r, mid), f, d, m),
  64.         mx(v*2 + 1, mid + 1, right, max(l, mid + 1), r, f, d, m));
  65. }
  66.  
  67. void update(ll v, ll left, ll right, ll pos, ll value, ll f(ll, ll), vector<ll>& d) {
  68.     if (left == right) {
  69.         d[v] = value;
  70.     } else {
  71.         ll mid = (left + right) / 2;
  72.         if (pos <= mid) {
  73.             update(v * 2, left, mid, pos, value, f, d);
  74.         } else {
  75.             update(v * 2 + 1, mid + 1, right, pos, value, f, d);
  76.         }
  77.         d[v] = f(d[v * 2], d[v * 2 + 1]);
  78.     }
  79. }
  80.  
  81. int main() {
  82.     ios::sync_with_stdio(false);
  83.     cin.tie(nullptr);
  84.     cout.tie(nullptr);
  85.  
  86.     ll m, n = 110000;
  87.     cin >> m;
  88.  
  89.     vector<ll> v(n);
  90.     for (ll i = 0; i < n + 1; ++i) {
  91.         v[i - 1] = (i * i % 12345) + (i * i * i % 23456);
  92.     }
  93.  
  94.     auto mxx = [](ll a, ll b) {re (a > b) ? a : b;};
  95.     auto mnn = [](ll a, ll b) {re (a < b) ? a : b;};
  96.  
  97.     build(v, 1, 0, n - 1, mxx, dmx);
  98.     build(v, 1, 0, n - 1, mnn, dmn);
  99.  
  100.     for (ll i = 0; i < m; ++i) {
  101.         ll a, b;
  102.         cin >> a >> b;
  103.         if (a > 0) {
  104.             cout << mx(1, 0, n - 1, a - 1, b - 1, mxx, dmx, 1) -
  105.             mx(1, 0, n - 1, a - 1, b - 1, mnn, dmn, 0) << endl;
  106.         } else {
  107.             update(1, 0, n - 1, -a - 1, b, mxx, dmx);
  108.             update(1, 0, n - 1, -a - 1, b, mnn, dmn);
  109.         }
  110.     }
  111.  
  112.     re 0;
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement