10741 2024. 04. 10 23:42:48 42 Főnökszám pypy3 Időlimit túllépés 40/100 472ms 116684 KiB
from sys import stdin, stdout
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 = 1000

    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 = list(map(int, input().split()))
    L.insert((A,-B))
    stdout.write('1\n')

    for _ in range(N-1):
        A,B = list(map(int, 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)
        stdout.write(str(len(L))+'\n')
        
main()
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 54ms 80564 KiB
2 Elfogadva 280ms 106888 KiB
subtask2 5/5
3 Elfogadva 52ms 80924 KiB
4 Elfogadva 54ms 81752 KiB
5 Elfogadva 85ms 89040 KiB
6 Elfogadva 115ms 93728 KiB
subtask3 10/10
7 Elfogadva 52ms 81692 KiB
8 Elfogadva 64ms 88000 KiB
9 Elfogadva 65ms 89460 KiB
10 Elfogadva 57ms 86452 KiB
11 Elfogadva 85ms 90740 KiB
12 Elfogadva 90ms 89780 KiB
13 Elfogadva 111ms 94000 KiB
14 Elfogadva 125ms 96044 KiB
subtask4 0/10
15 Elfogadva 48ms 82984 KiB
16 Elfogadva 54ms 82792 KiB
17 Elfogadva 107ms 91660 KiB
18 Elfogadva 129ms 95420 KiB
19 Elfogadva 123ms 95360 KiB
20 Elfogadva 143ms 97272 KiB
21 Elfogadva 150ms 97884 KiB
22 Időlimit túllépés 421ms 38480 KiB
subtask5 25/25
23 Elfogadva 81ms 90192 KiB
24 Elfogadva 93ms 91056 KiB
25 Elfogadva 112ms 96328 KiB
26 Elfogadva 140ms 96156 KiB
27 Elfogadva 202ms 104748 KiB
28 Elfogadva 240ms 105332 KiB
29 Elfogadva 268ms 108048 KiB
30 Elfogadva 293ms 108636 KiB
subtask6 0/50
31 Elfogadva 52ms 84084 KiB
32 Elfogadva 273ms 110160 KiB
33 Elfogadva 52ms 80924 KiB
34 Elfogadva 54ms 81752 KiB
35 Elfogadva 85ms 89040 KiB
36 Elfogadva 115ms 93728 KiB
37 Elfogadva 52ms 81692 KiB
38 Elfogadva 64ms 88000 KiB
39 Elfogadva 65ms 89460 KiB
40 Elfogadva 57ms 86452 KiB
41 Elfogadva 85ms 90740 KiB
42 Elfogadva 90ms 89780 KiB
43 Elfogadva 111ms 94000 KiB
44 Elfogadva 125ms 96044 KiB
45 Elfogadva 48ms 82984 KiB
46 Elfogadva 54ms 82792 KiB
47 Elfogadva 107ms 91660 KiB
48 Elfogadva 129ms 95420 KiB
49 Elfogadva 123ms 95360 KiB
50 Elfogadva 143ms 97272 KiB
51 Elfogadva 150ms 97884 KiB
52 Időlimit túllépés 421ms 38480 KiB
53 Elfogadva 81ms 90192 KiB
54 Elfogadva 93ms 91056 KiB
55 Elfogadva 112ms 96328 KiB
56 Elfogadva 140ms 96156 KiB
57 Elfogadva 202ms 104748 KiB
58 Elfogadva 240ms 105332 KiB
59 Elfogadva 268ms 108048 KiB
60 Elfogadva 293ms 108636 KiB
61 Elfogadva 125ms 96388 KiB
62 Elfogadva 300ms 116684 KiB
63 Elfogadva 125ms 96948 KiB
64 Időlimit túllépés 437ms 116480 KiB
65 Elfogadva 130ms 98008 KiB
66 Elfogadva 126ms 96712 KiB
67 Elfogadva 119ms 97152 KiB
68 Elfogadva 120ms 96100 KiB
69 Elfogadva 337ms 111104 KiB
70 Időlimit túllépés 472ms 42116 KiB