Mo's & Update - YessineJallouli/Competitive-Programming GitHub Wiki

#include <bits/stdc++.h>
#define ll long long
#define SaveTime ios_base::sync_with_stdio(false), cin.tie(0);
using namespace std;

struct query {
    int L,R,t,id;
    query() {
        L = R = t = id = 0;
    }
    query(int _L, int _R, int _t, int _id) {
        L = _L;
        R = _R;
        t = _t;
        id = _id;
    }
};

int block;
const int N = 5e4+7;
const int Q = 1e5+7;

int a[N];
ll nb = 0;

pair<int,int> after[Q];
pair<int,int> before[Q];

bool cmp(query q1, query q2) {
    if (q1.L/block < q2.L/block)
        return true;
    if (q1.L/block == q2.L/block && q1.R/block < q2.R/block)
        return true;
    if (q1.L/block == q2.L/block && q1.R/block == q2.R/block && q1.t < q2.t)
        return true;
    return false;
}

void ins(int val) {

}

void del(int val) {

}

int main() {
    SaveTime
    int n,q; cin >> n;
    block = pow(n,2/3.0)+1;
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    cin >> q;
    vector<query> qr;
    int tmp = 0;
    for (int i = 0; i < q; i++) {
        char c; int x,y; cin >> c >> x >> y;
        if (c == 'U') {
            tmp++;
            x--;
            before[tmp] = {x,a[x]};
            after[tmp-1] = {x,y};
            a[x] = y;
        }
        else {
            x--; y--;
            qr.push_back(query(x,y,tmp,i));
        }
    }

    sort(qr.begin(), qr.end(), cmp);
    ll ans[q];
    for (int i = 0; i < q; i++)
        ans[i] = LLONG_MAX;

    int l = 0, r = -1;
    for (int i = 0; i < qr.size(); i++) {
        auto [L,R,t,id] = qr[i];
        while (tmp > t) {
            auto[idx, val] = before[tmp];
            if (idx >= l && idx <= r) {
                
            }
            a[idx] = val;
            tmp--;
        }
        while (tmp < t) {
            auto[idx, val] = after[tmp];
            if (idx >= l && idx <= r) {
                
            }
            a[idx] = val;
            tmp++;
        }
        while (r < R) {
            r++;
            ins(a[r]);
        }
        while (r > R) {
            del(a[r]);
            r--;
        }
        while (l < L) {
            del(a[l]);
            l++;
        }
        while (l > L) {
            l--;
            ins(a[l]);
        }
        ans[id] = nb;
    }
    for (int i = 0; i < q; i++) {
        if (ans[i] == LLONG_MAX)
            continue;
        cout << ans[i] << '\n';
    }
}

Problems :
https://www.spoj.com/problems/XXXXXXXX/en/

⚠️ **GitHub.com Fallback** ⚠️