Use this to learn the idea, then write your own version.
1package main2 3import (4 "bufio"5 . "fmt"6 "io"7)8 910type seg79 []struct{ l, r, s, mx int }11 12func (t seg79) build(o, l, r int) {13 t[o].l, t[o].r = l, r14 if l == r {15 return16 }17 m := (l + r) >> 118 t.build(o<<1, l, m)19 t.build(o<<1|1, m+1, r)20}21 22func (t seg79) update(o, i, v int) {23 if t[o].l == t[o].r {24 t[o].s += v25 t[o].mx += v26 return27 }28 m := (t[o].l + t[o].r) >> 129 if i <= m {30 t.update(o<<1, i, v)31 } else {32 t.update(o<<1|1, i, v)33 }34 lo, ro := t[o<<1], t[o<<1|1]35 t[o].s = lo.s + ro.s36 t[o].mx = max(lo.mx+ro.s, ro.mx)37}38 39func (t seg79) binarySearch(o, s int) int {40 if t[o].l == t[o].r {41 if t[o].s > s {42 return t[o].l43 }44 return -145 }46 if t[o<<1|1].mx > s {47 return t.binarySearch(o<<1|1, s)48 }49 return t.binarySearch(o<<1, s-t[o<<1|1].s)50}51 52func CF1179C(_r io.Reader, _w io.Writer) {53 in := bufio.NewReader(_r)54 out := bufio.NewWriter(_w)55 defer out.Flush()56 const mx int = 1e657 58 t := make(seg79, 4*mx)59 t.build(1, 1, mx)60 var n, m, q, op, p, v int61 Fscan(in, &n, &m)62 a := make([]int, n)63 for i := range a {64 Fscan(in, &a[i])65 t.update(1, a[i], 1) 66 }67 b := make([]int, m)68 for i := range b {69 Fscan(in, &b[i])70 t.update(1, b[i], -1)71 }72 for Fscan(in, &q); q > 0; q-- {73 Fscan(in, &op, &p, &v)74 p--75 if op == 1 {76 t.update(1, a[p], -1)77 t.update(1, v, 1)78 a[p] = v79 } else {80 t.update(1, b[p], 1)81 t.update(1, v, -1)82 b[p] = v83 }84 Fprintln(out, t.binarySearch(1, 0))85 }86}87 8889