10736 2024. 04. 10 23:27:36 42 Főnökszám python3 Időlimit túllépés 15/100 500ms 16004 KiB
from sys import stdin
input=stdin.readline

from bisect import bisect_left as lower_bound
from bisect import bisect_right as upper_bound

class FenwickTree:
    def __init__(self, x):
        bit = self.bit = list(x)
        size = self.size = len(bit)
        for i in range(size):
            j = i | (i + 1)
            if j < size:
                bit[j] += bit[i]

    def update(self, idx, x):
        """updates bit[idx] += x"""
        while idx < self.size:
            self.bit[idx] += x
            idx |= idx + 1

    def __call__(self, end):
        """calc sum(bit[:end])"""
        x = 0
        while end:
            x += self.bit[end - 1]
            end &= end - 1
        return x

    def find_kth(self, k):
        """Find largest idx such that sum(bit[:idx]) <= k"""
        idx = -1
        for d in reversed(range(self.size.bit_length())):
            right_idx = idx + (1 << d)
            if right_idx < self.size and self.bit[right_idx] <= k:
                idx = right_idx
                k -= self.bit[idx]
        return idx + 1, k

class SortedList:
    block_size = 700

    def __init__(self, iterable=()):
        self.macro = []
        self.micros = [[]]
        self.micro_size = [0]
        self.fenwick = FenwickTree([0])
        self.size = 0
        for item in iterable:
            self.insert(item)

    def insert(self, x):
        i = lower_bound(self.macro, x)
        j = upper_bound(self.micros[i], x)
        self.micros[i].insert(j, x)
        self.size += 1
        self.micro_size[i] += 1
        self.fenwick.update(i, 1)
        if len(self.micros[i]) >= self.block_size:
            self.micros[i:i + 1] = self.micros[i][:self.block_size >> 1], self.micros[i][self.block_size >> 1:]
            self.micro_size[i:i + 1] = self.block_size >> 1, self.block_size >> 1
            self.fenwick = FenwickTree(self.micro_size)
            self.macro.insert(i, self.micros[i + 1][0])

    def pop(self, k=-1):
        i, j = self._find_kth(k)
        self.size -= 1
        self.micro_size[i] -= 1
        self.fenwick.update(i, -1)
        return self.micros[i].pop(j)

    def __getitem__(self, k):
        i, j = self._find_kth(k)
        return self.micros[i][j]

    def count(self, x):
        return self.upper_bound(x) - self.lower_bound(x)

    def __contains__(self, x):
        return self.count(x) > 0

    def lower_bound(self, x):
        i = lower_bound(self.macro, x)
        return self.fenwick(i) + lower_bound(self.micros[i], x)

    def upper_bound(self, x):
        i = upper_bound(self.macro, x)
        return self.fenwick(i) + upper_bound(self.micros[i], x)

    def _find_kth(self, k):
        return self.fenwick.find_kth(k + self.size if k < 0 else k)

    def __len__(self):
        return self.size

    def __iter__(self):
        return (x for micro in self.micros for x in micro)

    def __repr__(self):
        return str(list(self))


def main():
    # n^4/3*log(n)
    N = int(input())

    L = SortedList()
    A,B = [int(x) for x in input().split()]
    L.insert((A,-B))
    print(1)

    for _ in range(N-1):
        A,B = [int(x) for x in input().split()]
        i = upper_bound(L,(A,-B))
        if i==len(L):
            if B<=-L[-1][1]:
                L.insert((A,-B))
            else:
                L.insert((A,-B))
                while len(L)>1 and B>-L[-2][1] and A>L[-2][0]:
                    #print(L,A,-B)
                    L.pop(-2)
                    #print(L)
        else:
            if B<-L[i][1] and A<L[i][0]:
                pass
            else:
                L.insert((A,-B))
                while i>0 and B>-L[i-1][1] and A>L[i-1][0]:
                    #print(L,A,-B)
                    L.pop(i-1)
                    i-=1
                    #print(L)
        print(len(L))
        
main()
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 19ms 12640 KiB
2 Időlimit túllépés 460ms 4792 KiB
subtask2 5/5
3 Elfogadva 19ms 13136 KiB
4 Elfogadva 19ms 13204 KiB
5 Elfogadva 25ms 13912 KiB
6 Elfogadva 76ms 13976 KiB
subtask3 10/10
7 Elfogadva 18ms 13628 KiB
8 Elfogadva 19ms 13488 KiB
9 Elfogadva 21ms 13412 KiB
10 Elfogadva 21ms 13528 KiB
11 Elfogadva 25ms 13564 KiB
12 Elfogadva 28ms 13776 KiB
13 Elfogadva 46ms 14192 KiB
14 Elfogadva 64ms 14668 KiB
subtask4 0/10
15 Elfogadva 18ms 14060 KiB
16 Elfogadva 19ms 14424 KiB
17 Elfogadva 32ms 14488 KiB
18 Elfogadva 37ms 14940 KiB
19 Elfogadva 109ms 15088 KiB
20 Elfogadva 202ms 15552 KiB
21 Elfogadva 193ms 15632 KiB
22 Időlimit túllépés 469ms 8056 KiB
subtask5 0/25
23 Elfogadva 24ms 14884 KiB
24 Elfogadva 28ms 15208 KiB
25 Elfogadva 46ms 15664 KiB
26 Elfogadva 64ms 15540 KiB
27 Időlimit túllépés 453ms 16004 KiB
28 Időlimit túllépés 456ms 7232 KiB
29 Időlimit túllépés 467ms 7296 KiB
30 Időlimit túllépés 463ms 7012 KiB
subtask6 0/50
31 Elfogadva 18ms 15132 KiB
32 Időlimit túllépés 500ms 7104 KiB
33 Elfogadva 19ms 13136 KiB
34 Elfogadva 19ms 13204 KiB
35 Elfogadva 25ms 13912 KiB
36 Elfogadva 76ms 13976 KiB
37 Elfogadva 18ms 13628 KiB
38 Elfogadva 19ms 13488 KiB
39 Elfogadva 21ms 13412 KiB
40 Elfogadva 21ms 13528 KiB
41 Elfogadva 25ms 13564 KiB
42 Elfogadva 28ms 13776 KiB
43 Elfogadva 46ms 14192 KiB
44 Elfogadva 64ms 14668 KiB
45 Elfogadva 18ms 14060 KiB
46 Elfogadva 19ms 14424 KiB
47 Elfogadva 32ms 14488 KiB
48 Elfogadva 37ms 14940 KiB
49 Elfogadva 109ms 15088 KiB
50 Elfogadva 202ms 15552 KiB
51 Elfogadva 193ms 15632 KiB
52 Időlimit túllépés 469ms 8056 KiB
53 Elfogadva 24ms 14884 KiB
54 Elfogadva 28ms 15208 KiB
55 Elfogadva 46ms 15664 KiB
56 Elfogadva 64ms 15540 KiB
57 Időlimit túllépés 453ms 16004 KiB
58 Időlimit túllépés 456ms 7232 KiB
59 Időlimit túllépés 467ms 7296 KiB
60 Időlimit túllépés 463ms 7012 KiB
61 Elfogadva 67ms 15684 KiB
62 Elfogadva 92ms 15712 KiB
63 Elfogadva 65ms 15672 KiB
64 Időlimit túllépés 462ms 8560 KiB
65 Elfogadva 65ms 15828 KiB
66 Elfogadva 61ms 15592 KiB
67 Elfogadva 64ms 15888 KiB
68 Elfogadva 64ms 15924 KiB
69 Időlimit túllépés 462ms 7296 KiB
70 Időlimit túllépés 460ms 8752 KiB