10735 2024. 04. 10 23:26:27 42 Főnökszám pypy3 Időlimit túllépés 40/100 469ms 118888 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 46ms 80344 KiB
2 Elfogadva 296ms 115460 KiB
subtask2 5/5
3 Elfogadva 45ms 80832 KiB
4 Elfogadva 48ms 80992 KiB
5 Elfogadva 82ms 88084 KiB
6 Elfogadva 119ms 94596 KiB
subtask3 10/10
7 Elfogadva 45ms 81268 KiB
8 Elfogadva 57ms 88320 KiB
9 Elfogadva 71ms 89872 KiB
10 Elfogadva 68ms 87192 KiB
11 Elfogadva 96ms 91404 KiB
12 Elfogadva 97ms 91048 KiB
13 Elfogadva 122ms 96272 KiB
14 Elfogadva 136ms 95688 KiB
subtask4 0/10
15 Elfogadva 54ms 82588 KiB
16 Elfogadva 54ms 83304 KiB
17 Elfogadva 93ms 91116 KiB
18 Elfogadva 123ms 95700 KiB
19 Elfogadva 128ms 97312 KiB
20 Elfogadva 156ms 99188 KiB
21 Elfogadva 180ms 99240 KiB
22 Időlimit túllépés 469ms 42888 KiB
subtask5 25/25
23 Elfogadva 75ms 92048 KiB
24 Elfogadva 89ms 92648 KiB
25 Elfogadva 120ms 97356 KiB
26 Elfogadva 127ms 98216 KiB
27 Elfogadva 207ms 106960 KiB
28 Elfogadva 250ms 113888 KiB
29 Elfogadva 282ms 116292 KiB
30 Elfogadva 286ms 116204 KiB
subtask6 0/50
31 Elfogadva 45ms 84388 KiB
32 Elfogadva 305ms 118888 KiB
33 Elfogadva 45ms 80832 KiB
34 Elfogadva 48ms 80992 KiB
35 Elfogadva 82ms 88084 KiB
36 Elfogadva 119ms 94596 KiB
37 Elfogadva 45ms 81268 KiB
38 Elfogadva 57ms 88320 KiB
39 Elfogadva 71ms 89872 KiB
40 Elfogadva 68ms 87192 KiB
41 Elfogadva 96ms 91404 KiB
42 Elfogadva 97ms 91048 KiB
43 Elfogadva 122ms 96272 KiB
44 Elfogadva 136ms 95688 KiB
45 Elfogadva 54ms 82588 KiB
46 Elfogadva 54ms 83304 KiB
47 Elfogadva 93ms 91116 KiB
48 Elfogadva 123ms 95700 KiB
49 Elfogadva 128ms 97312 KiB
50 Elfogadva 156ms 99188 KiB
51 Elfogadva 180ms 99240 KiB
52 Időlimit túllépés 469ms 42888 KiB
53 Elfogadva 75ms 92048 KiB
54 Elfogadva 89ms 92648 KiB
55 Elfogadva 120ms 97356 KiB
56 Elfogadva 127ms 98216 KiB
57 Elfogadva 207ms 106960 KiB
58 Elfogadva 250ms 113888 KiB
59 Elfogadva 282ms 116292 KiB
60 Elfogadva 286ms 116204 KiB
61 Elfogadva 126ms 98028 KiB
62 Elfogadva 264ms 105756 KiB
63 Elfogadva 126ms 97548 KiB
64 Időlimit túllépés 462ms 42724 KiB
65 Elfogadva 129ms 97344 KiB
66 Elfogadva 123ms 97076 KiB
67 Elfogadva 125ms 98548 KiB
68 Elfogadva 123ms 98088 KiB
69 Elfogadva 326ms 117252 KiB
70 Időlimit túllépés 462ms 43684 KiB