Submission #14349092


Source Code Expand

Copy
# -*- coding: utf-8 -*-
# import bisect
# import heapq
# import math
# import random
# from collections import Counter, defaultdict, deque
# from decimal import ROUND_CEILING, ROUND_HALF_UP, Decimal
# from functools import lru_cache, reduce
# from itertools import combinations, combinations_with_replacement, product, permutations
# from operator import add, mul, sub
import sys
# sys.setrecursionlimit(10**6)
# buff_readline = sys.stdin.buffer.readline
buff_readline = sys.stdin.readline
readline = sys.stdin.readline
INF = 2**62-1
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# -*- coding: utf-8 -*-
# import bisect
# import heapq
# import math
# import random
# from collections import Counter, defaultdict, deque
# from decimal import ROUND_CEILING, ROUND_HALF_UP, Decimal
# from functools import lru_cache, reduce
# from itertools import combinations, combinations_with_replacement, product, permutations
# from operator import add, mul, sub


import sys
# sys.setrecursionlimit(10**6)
# buff_readline = sys.stdin.buffer.readline
buff_readline = sys.stdin.readline
readline = sys.stdin.readline

INF = 2**62-1


def read_int():
    return int(buff_readline())


def read_int_n():
    return list(map(int, buff_readline().split()))


def read_float():
    return float(buff_readline())


def read_float_n():
    return list(map(float, buff_readline().split()))


def read_str():
    return readline().strip()


def read_str_n():
    return readline().strip().split()

def error_print(*args):
    print(*args, file=sys.stderr)


def mt(f):
    import time

    def wrap(*args, **kwargs):
        s = time.time()
        ret = f(*args, **kwargs)
        e = time.time()

        error_print(e - s, 'sec')
        return ret

    return wrap


class SegmentTree:
    def __init__(self, array, operator, identity_element):
        _len = len(array)
        self.__op = operator
        self.__size = 1 << (_len - 1).bit_length()
        self.__tree = [identity_element] * self.__size + \
            array + [identity_element] * (self.__size - _len)
        self.__ie = identity_element

        for i in range(self.__size - 1, 0, -1):
            self.__tree[i] = operator(
                self.__tree[i * 2], self.__tree[i * 2 + 1])

    def update(self, i, v):
        i += self.__size
        self.__tree[i] = v
        while i:
            i //= 2
            self.__tree[i] = self.__op(
                self.__tree[i * 2], self.__tree[i * 2 + 1])

    def query(self, l, r):
        """[l, r)
        """
        l += self.__size
        r += self.__size
        ret = self.__ie
        while l < r:
            if l & 1:
                ret = self.__op(ret, self.__tree[l])
                l += 1
            if r & 1:
                r -= 1
                ret = self.__op(ret, self.__tree[r])
            l //= 2
            r //= 2
        return ret

@mt
def slv(N, Q, AB, CD):
    M = 2*(10**5)
    m = [set() for _ in range(M)]
    ci = {}
    for i, (a, b) in enumerate(AB):
        b -= 1
        m[b].add(i)
        ci[i] = b



    fl = [0] * M
    st = SegmentTree([INF]*M, min, INF)
    for i in range(M):
        if len(m[i]) > 0:
            f = max(AB[j][0] for j in m[i])
            fl[i] = f
            st.update(i, f)



    for c, d in CD:
        c -= 1
        d -= 1
        cur = ci[c]
        ci[c] = d
        m[cur].remove(c)
        a = AB[c][0]
        if a == fl[cur]:
            if m[cur]:
                f = max(AB[j][0] for j in m[cur])
                fl[cur] = f
            else:
                f = INF
                fl[cur] = 0
            st.update(cur, f)
        m[d].add(c)
        if a > fl[d]:
            f = a
            fl[d] = a
            st.update(d, f)
        print(st.query(0, M))





    # ans = 0
    # return ans


def main():
    N, Q = read_int_n()
    AB = [read_int_n() for _ in range(N)]
    CD = [read_int_n() for _ in range(Q)]
    (slv(N, Q, AB, CD))


if __name__ == '__main__':
    main()

Submission Info

Submission Time
Task E - Smart Infants
User patahene
Language PyPy3 (7.3.0)
Score 500
Code Size 3553 Byte
Status AC
Exec Time 1513 ms
Memory 210564 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 500 / 500
Status AC
AC × 11
Set Name Test Cases
Sample
All handmade02, handmade03, handmade04, handmade05, handmade06, handmade07, handmade08, handmade09, random10, sample00, sample01
Case Name Status Exec Time Memory
handmade02 AC 93 ms 100632 KB
handmade03 AC 82 ms 101440 KB
handmade04 AC 84 ms 101184 KB
handmade05 AC 399 ms 137112 KB
handmade06 AC 741 ms 183084 KB
handmade07 AC 806 ms 188140 KB
handmade08 AC 1158 ms 210172 KB
handmade09 AC 1165 ms 209816 KB
random10 AC 1513 ms 210564 KB
sample00 AC 98 ms 100856 KB
sample01 AC 73 ms 100960 KB


2025-04-14 (Mon)
21:49:08 +00:00