Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*-------------------- Code written by Kabeton --------------------*/
- /*--- Contacts: https://vk.com/kabeton and TheKabeton@yandex.ru ---*/
- #define _USE_MATH_DEFINES
- #include <iostream>
- #include <iomanip>
- #include <cstdio>
- #include <cstdlib>
- #include <cmath>
- #include <algorithm>
- #include <vector>
- #include <map>
- #include <unordered_map>
- #include <set>
- #include <bitset>
- #include <tuple>
- #include <queue>
- #include <stack>
- #include <valarray>
- #include <sstream>
- #include <cstring>
- #include <numeric>
- #include <ctime>
- #include <cassert>
- #define endl "\n"
- #define re return
- #define fi first
- #define se second
- typedef long long ll;
- typedef unsigned long long ull;
- typedef long double ld;
- const ll mod = 1e9 + 7;
- using namespace std;
- vector<ll> dmx(4 * 110000);
- vector<ll> dmn(4 * 110000);
- void build(const vector<ll>& v, ll ind, ll left, ll right, ll f(ll, ll), vector<ll>& d) {
- if (left == right) {
- d[ind] = v[left];
- } else {
- ll mid = (left + right) / 2;
- build(v, ind * 2, left, mid, f, d);
- build(v, ind * 2 + 1, mid + 1, right, f, d);
- d[ind] = f(d[ind * 2], d[ind * 2 + 1]);
- }
- }
- ll mx(ll v, ll left, ll right, ll l, ll r, ll f(ll, ll), vector<ll>& d, bool m) {
- if (l > r) {
- if (m) {
- re -100000000;
- } else {
- re 100000000;
- }
- }
- if (left == l && right == r) re d[v];
- ll mid = (left + right) / 2;
- re f(mx(v*2, left, mid, l, min(r, mid), f, d, m),
- mx(v*2 + 1, mid + 1, right, max(l, mid + 1), r, f, d, m));
- }
- void update(ll v, ll left, ll right, ll pos, ll value, ll f(ll, ll), vector<ll>& d) {
- if (left == right) {
- d[v] = value;
- } else {
- ll mid = (left + right) / 2;
- if (pos <= mid) {
- update(v * 2, left, mid, pos, value, f, d);
- } else {
- update(v * 2 + 1, mid + 1, right, pos, value, f, d);
- }
- d[v] = f(d[v * 2], d[v * 2 + 1]);
- }
- }
- int main() {
- ios::sync_with_stdio(false);
- cin.tie(nullptr);
- cout.tie(nullptr);
- ll m, n = 110000;
- cin >> m;
- vector<ll> v(n);
- for (ll i = 0; i < n + 1; ++i) {
- v[i - 1] = (i * i % 12345) + (i * i * i % 23456);
- }
- auto mxx = [](ll a, ll b) {re (a > b) ? a : b;};
- auto mnn = [](ll a, ll b) {re (a < b) ? a : b;};
- build(v, 1, 0, n - 1, mxx, dmx);
- build(v, 1, 0, n - 1, mnn, dmn);
- for (ll i = 0; i < m; ++i) {
- ll a, b;
- cin >> a >> b;
- if (a > 0) {
- cout << mx(1, 0, n - 1, a - 1, b - 1, mxx, dmx, 1) -
- mx(1, 0, n - 1, a - 1, b - 1, mnn, dmn, 0) << endl;
- } else {
- update(1, 0, n - 1, -a - 1, b, mxx, dmx);
- update(1, 0, n - 1, -a - 1, b, mnn, dmn);
- }
- }
- re 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement