#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
#define FAST ios_base::sync_with_stdio(false); cin.tie(NULL);
#define F first
#define S second
#define rep(i,x,n) for(int i = x; i < n; i++)
const int N = 2e5 + 5, SQ = 3500;
struct query {
int l, r, idx, uIdx;
bool operator<(const query& other) const{
if (l / SQ != other.l / SQ)
return l / SQ < other.l / SQ;
if (r / SQ != other.r / SQ)
return r / SQ < other.r / SQ;
return uIdx < other.uIdx;
}
};
struct update {
int idx, val, old;
};
int a[N], ans[N], frq[N], cnt[N];
void add(int idx) {
cnt[frq[a[idx]]]--; // decrease count of previous frequency
frq[a[idx]]++;
cnt[frq[a[idx]]]++; // increase count of new frequency
}
void remove(int idx) {
cnt[frq[a[idx]]]--;
frq[a[idx]]--;
cnt[frq[a[idx]]]++;
}
void upd(update& u, int l, int r) {
if (u.idx >= l && u.idx <= r)
remove(u.idx);
a[u.idx] = u.val;
if (u.idx >= l && u.idx <= r)
add(u.idx);
}
void cancel(update& u, int l, int r) {
if (u.idx >= l && u.idx <= r) remove(u.idx);
a[u.idx] = u.old;
if (u.idx >= l && u.idx <= r) add(u.idx);
}
void mo(vector<query>& v, vector<update>& u) {
int l = 0, r = -1;
int cur = 0;
for (auto& q : v) {
while (cur < q.uIdx)
upd(u[cur++], l, r);
while (cur > q.uIdx)
cancel(u[--cur], l, r);
while (r < q.r) add(++r);
while (l > q.l) add(--l);
while (r > q.r) remove(r--);
while (l < q.l) remove(l++);
while (cnt[ans[q.idx]]) ans[q.idx]++;
}
}
int main() {
a[0] = 1; a[1] = 1; a[2] = 1; a[3] = 3; a[4] = 3; a[5] = 3; a[6] = 1;
vector<query> queries = {
{1, 3, 0, 0}, // query 0, range [1,3], before 0 updates
{0, 6, 1, 1}, // query 1, range [0,6], after 1 update
};
vector<update> updates = {
{2, 2, a[2]} // update index 2 to value 2
};
mo(queries, updates);
cout << ans[0] << " " << ans[1]; // prints answers
}
CgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgZW5kbCAiXG4iCiNkZWZpbmUgRkFTVCBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgY2luLnRpZShOVUxMKTsKCiNkZWZpbmUgRiBmaXJzdAojZGVmaW5lIFMgc2Vjb25kCgojZGVmaW5lIHJlcChpLHgsbikgZm9yKGludCBpID0geDsgaSA8IG47IGkrKykKCgpjb25zdCBpbnQgTiA9IDJlNSArIDUsIFNRID0gMzUwMDsKc3RydWN0IHF1ZXJ5IHsKCSAgaW50IGwsIHIsIGlkeCwgdUlkeDsKCSAgYm9vbCBvcGVyYXRvcjwoY29uc3QgcXVlcnkmIG90aGVyKSBjb25zdHsKCSAgICBpZiAobCAvIFNRICE9IG90aGVyLmwgLyBTUSkKCSAgICAgIHJldHVybiBsIC8gU1EgPCBvdGhlci5sIC8gU1E7CgkgICAgaWYgKHIgLyBTUSAhPSBvdGhlci5yIC8gU1EpCgkgICAgICByZXR1cm4gciAvIFNRIDwgb3RoZXIuciAvIFNROwoJICAgIHJldHVybiB1SWR4IDwgb3RoZXIudUlkeDsKCSAgfQoJfTsKc3RydWN0IHVwZGF0ZSB7CgkgIGludCBpZHgsIHZhbCwgb2xkOwp9OwppbnQgYVtOXSwgYW5zW05dLCBmcnFbTl0sIGNudFtOXTsKdm9pZCBhZGQoaW50IGlkeCkgewogICAgY250W2ZycVthW2lkeF1dXS0tOyAgLy8gZGVjcmVhc2UgY291bnQgb2YgcHJldmlvdXMgZnJlcXVlbmN5CiAgICBmcnFbYVtpZHhdXSsrOwogICAgY250W2ZycVthW2lkeF1dXSsrOyAgLy8gaW5jcmVhc2UgY291bnQgb2YgbmV3IGZyZXF1ZW5jeQp9Cgp2b2lkIHJlbW92ZShpbnQgaWR4KSB7CiAgICBjbnRbZnJxW2FbaWR4XV1dLS07CiAgICBmcnFbYVtpZHhdXS0tOwogICAgY250W2ZycVthW2lkeF1dXSsrOwp9CnZvaWQgdXBkKHVwZGF0ZSYgdSwgaW50IGwsIGludCByKSB7CiAgaWYgKHUuaWR4ID49IGwgJiYgdS5pZHggPD0gcikKICAgIHJlbW92ZSh1LmlkeCk7CiAgYVt1LmlkeF0gPSB1LnZhbDsKICBpZiAodS5pZHggPj0gbCAmJiB1LmlkeCA8PSByKQogICAgYWRkKHUuaWR4KTsKfQp2b2lkIGNhbmNlbCh1cGRhdGUmIHUsIGludCBsLCBpbnQgcikgewogIGlmICh1LmlkeCA+PSBsICYmIHUuaWR4IDw9IHIpIHJlbW92ZSh1LmlkeCk7CiAgYVt1LmlkeF0gPSB1Lm9sZDsKICBpZiAodS5pZHggPj0gbCAmJiB1LmlkeCA8PSByKSBhZGQodS5pZHgpOwp9CnZvaWQgbW8odmVjdG9yPHF1ZXJ5PiYgdiwgdmVjdG9yPHVwZGF0ZT4mIHUpIHsKICBpbnQgbCA9IDAsIHIgPSAtMTsKICBpbnQgY3VyID0gMDsKICBmb3IgKGF1dG8mIHEgOiB2KSB7CiAgICB3aGlsZSAoY3VyIDwgcS51SWR4KQogICAgICB1cGQodVtjdXIrK10sIGwsIHIpOwogICAgd2hpbGUgKGN1ciA+IHEudUlkeCkKICAgICAgY2FuY2VsKHVbLS1jdXJdLCBsLCByKTsKICAgIHdoaWxlIChyIDwgcS5yKSBhZGQoKytyKTsKICAgIHdoaWxlIChsID4gcS5sKSBhZGQoLS1sKTsKICAgIHdoaWxlIChyID4gcS5yKSByZW1vdmUoci0tKTsKICAgIHdoaWxlIChsIDwgcS5sKSByZW1vdmUobCsrKTsKICAgIHdoaWxlIChjbnRbYW5zW3EuaWR4XV0pIGFuc1txLmlkeF0rKzsKICB9Cn0KCgoKaW50IG1haW4oKSB7CiAgICAKICAgIGFbMF0gPSAxOyBhWzFdID0gMTsgYVsyXSA9IDE7IGFbM10gPSAzOyBhWzRdID0gMzsgYVs1XSA9IDM7IGFbNl0gPSAxOwoKICAgIHZlY3RvcjxxdWVyeT4gcXVlcmllcyA9IHsKICAgICAgICB7MSwgMywgMCwgMH0sICAvLyBxdWVyeSAwLCByYW5nZSBbMSwzXSwgYmVmb3JlIDAgdXBkYXRlcwogICAgICAgIHswLCA2LCAxLCAxfSwgIC8vIHF1ZXJ5IDEsIHJhbmdlIFswLDZdLCBhZnRlciAxIHVwZGF0ZQogICAgfTsKCiAgICB2ZWN0b3I8dXBkYXRlPiB1cGRhdGVzID0gewogICAgICAgIHsyLCAyLCBhWzJdfSAgLy8gdXBkYXRlIGluZGV4IDIgdG8gdmFsdWUgMgogICAgfTsKCiAgICBtbyhxdWVyaWVzLCB1cGRhdGVzKTsKCiAgICBjb3V0IDw8IGFuc1swXSA8PCAiICIgPDwgYW5zWzFdOyAgLy8gcHJpbnRzIGFuc3dlcnMKfQ==