10742 2024. 04. 10 23:51:50 42 Főnökszám pypy3 Időlimit túllépés 40/100 481ms 116332 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 = 50

    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 46ms 80388 KiB
2 Elfogadva 273ms 106688 KiB
subtask2 5/5
3 Elfogadva 43ms 80996 KiB
4 Elfogadva 46ms 81576 KiB
5 Elfogadva 75ms 88896 KiB
6 Elfogadva 107ms 93232 KiB
subtask3 10/10
7 Elfogadva 43ms 81860 KiB
8 Elfogadva 54ms 86344 KiB
9 Elfogadva 67ms 88204 KiB
10 Elfogadva 57ms 86032 KiB
11 Elfogadva 85ms 91016 KiB
12 Elfogadva 90ms 89764 KiB
13 Elfogadva 111ms 93796 KiB
14 Elfogadva 126ms 95688 KiB
subtask4 0/10
15 Elfogadva 48ms 82680 KiB
16 Elfogadva 46ms 82532 KiB
17 Elfogadva 92ms 91900 KiB
18 Elfogadva 104ms 95628 KiB
19 Elfogadva 112ms 95484 KiB
20 Elfogadva 130ms 97228 KiB
21 Elfogadva 140ms 97016 KiB
22 Időlimit túllépés 481ms 39260 KiB
subtask5 25/25
23 Elfogadva 71ms 90072 KiB
24 Elfogadva 83ms 90608 KiB
25 Elfogadva 108ms 96220 KiB
26 Elfogadva 129ms 96412 KiB
27 Elfogadva 190ms 103608 KiB
28 Elfogadva 226ms 105396 KiB
29 Elfogadva 261ms 107008 KiB
30 Elfogadva 273ms 108084 KiB
subtask6 0/50
31 Elfogadva 52ms 83292 KiB
32 Elfogadva 280ms 109752 KiB
33 Elfogadva 43ms 80996 KiB
34 Elfogadva 46ms 81576 KiB
35 Elfogadva 75ms 88896 KiB
36 Elfogadva 107ms 93232 KiB
37 Elfogadva 43ms 81860 KiB
38 Elfogadva 54ms 86344 KiB
39 Elfogadva 67ms 88204 KiB
40 Elfogadva 57ms 86032 KiB
41 Elfogadva 85ms 91016 KiB
42 Elfogadva 90ms 89764 KiB
43 Elfogadva 111ms 93796 KiB
44 Elfogadva 126ms 95688 KiB
45 Elfogadva 48ms 82680 KiB
46 Elfogadva 46ms 82532 KiB
47 Elfogadva 92ms 91900 KiB
48 Elfogadva 104ms 95628 KiB
49 Elfogadva 112ms 95484 KiB
50 Elfogadva 130ms 97228 KiB
51 Elfogadva 140ms 97016 KiB
52 Időlimit túllépés 481ms 39260 KiB
53 Elfogadva 71ms 90072 KiB
54 Elfogadva 83ms 90608 KiB
55 Elfogadva 108ms 96220 KiB
56 Elfogadva 129ms 96412 KiB
57 Elfogadva 190ms 103608 KiB
58 Elfogadva 226ms 105396 KiB
59 Elfogadva 261ms 107008 KiB
60 Elfogadva 273ms 108084 KiB
61 Elfogadva 116ms 96156 KiB
62 Elfogadva 284ms 116332 KiB
63 Elfogadva 115ms 96472 KiB
64 Időlimit túllépés 437ms 39112 KiB
65 Elfogadva 119ms 97964 KiB
66 Elfogadva 115ms 96636 KiB
67 Elfogadva 115ms 97124 KiB
68 Elfogadva 111ms 95364 KiB
69 Elfogadva 337ms 111580 KiB
70 Időlimit túllépés 474ms 40612 KiB