Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- #include <cmath>
- #include <vector>
- using namespace std;
- typedef long long ll;
- vector<pair< ll, ll >> t; // max, min
- pair<ll, ll> get(ll v, ll tl, ll tr, ll l, ll r) {
- if (tl == l && tr == r) {
- return t[v];
- }
- else {
- ll tm = (tl + tr) / 2;
- if (r <= tm) {
- return get(v * 2, tl, tm, l, r);
- }
- else if (l >= tm + 1) {
- return get(v * 2 + 1, tm + 1, tr, l, r);
- }
- else {
- pair<ll, ll> a = get(v*2, tl, tm, l, tm);
- pair<ll, ll> b = get(v * 2 + 1, tm + 1, tr, tm + 1, r);
- return make_pair(max(a.first, b.first), min(a.second, b.second));
- }
- }
- }
- void update(int pos, int l, int r, int npos, int nv)
- {
- if (l == r)
- {
- t[pos].first = nv;
- t[pos].second = nv;
- }
- else
- {
- int m = (l + r) / 2;
- if (npos <= m)
- update(pos * 2, l, m, npos, nv);
- else
- update(pos * 2 + 1, m + 1, r, npos, nv);
- t[pos] = make_pair(max(t[pos * 2].first, t[pos * 2 + 1].first), min(t[pos * 2].second, t[pos * 2 + 1].second));
- }
- }
- void build(ll v, ll tl, ll tr) {
- if (tl == tr) {
- t[v].first = (tl % 12345) * (tl % 12345) % 12345 + ((tl % 23456) * (tl % 23456) % 23456) * (tl % 23456) % 23456;
- t[v].second = t.at(v).first;
- }
- else {
- ll tm = (tl + tr) / 2;
- build(v * 2, tl, tm);
- build(v * 2 + 1, tm + 1, tr);
- t[v] = make_pair(max(t[v * 2].first, t[v * 2 + 1].first), min(t[v * 2].second, t[v * 2 + 1].second));
- }
- }
- int main() {
- ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
- t.resize(4 * 100000 + 1);
- build(1, 1, 100000);
- ll n, x, y;
- cin >> n;
- for (ll i = 0; i < n; i++) {
- cin >> x >> y;
- if (x > 0) {
- pair<ll, ll> q = get(1, 1, 100000, x, y);
- cout << q.first - q.second << "\n";
- }
- else {
- update(1, 1, 100000, -x, y);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement