107382024-04-10 23:32:1542Főnökszámpypy3Időlimit túllépés 40/100481ms118068 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 = 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))
    stdout.write('1\n')

    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)
        stdout.write(str(len(L))+'\n')
        
main()
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva48ms80560 KiB
2Elfogadva268ms106336 KiB
subtask25/5
3Elfogadva45ms80996 KiB
4Elfogadva48ms80892 KiB
5Elfogadva75ms88208 KiB
6Elfogadva112ms93244 KiB
subtask310/10
7Elfogadva46ms81988 KiB
8Elfogadva56ms88236 KiB
9Elfogadva61ms89644 KiB
10Elfogadva65ms86652 KiB
11Elfogadva87ms91184 KiB
12Elfogadva90ms89280 KiB
13Elfogadva129ms93600 KiB
14Elfogadva123ms94564 KiB
subtask40/10
15Elfogadva48ms82312 KiB
16Elfogadva48ms82496 KiB
17Elfogadva83ms91000 KiB
18Elfogadva103ms94444 KiB
19Elfogadva112ms94840 KiB
20Elfogadva130ms97044 KiB
21Elfogadva136ms97448 KiB
22Időlimit túllépés469ms41036 KiB
subtask525/25
23Elfogadva79ms90348 KiB
24Elfogadva86ms90752 KiB
25Elfogadva118ms96056 KiB
26Elfogadva123ms95480 KiB
27Elfogadva194ms104584 KiB
28Elfogadva223ms105688 KiB
29Elfogadva254ms110596 KiB
30Elfogadva254ms108096 KiB
subtask60/50
31Elfogadva45ms83972 KiB
32Elfogadva263ms108980 KiB
33Elfogadva45ms80996 KiB
34Elfogadva48ms80892 KiB
35Elfogadva75ms88208 KiB
36Elfogadva112ms93244 KiB
37Elfogadva46ms81988 KiB
38Elfogadva56ms88236 KiB
39Elfogadva61ms89644 KiB
40Elfogadva65ms86652 KiB
41Elfogadva87ms91184 KiB
42Elfogadva90ms89280 KiB
43Elfogadva129ms93600 KiB
44Elfogadva123ms94564 KiB
45Elfogadva48ms82312 KiB
46Elfogadva48ms82496 KiB
47Elfogadva83ms91000 KiB
48Elfogadva103ms94444 KiB
49Elfogadva112ms94840 KiB
50Elfogadva130ms97044 KiB
51Elfogadva136ms97448 KiB
52Időlimit túllépés469ms41036 KiB
53Elfogadva79ms90348 KiB
54Elfogadva86ms90752 KiB
55Elfogadva118ms96056 KiB
56Elfogadva123ms95480 KiB
57Elfogadva194ms104584 KiB
58Elfogadva223ms105688 KiB
59Elfogadva254ms110596 KiB
60Elfogadva254ms108096 KiB
61Elfogadva123ms95056 KiB
62Elfogadva287ms111328 KiB
63Elfogadva123ms96580 KiB
64Időlimit túllépés444ms118068 KiB
65Elfogadva119ms96948 KiB
66Elfogadva123ms97456 KiB
67Elfogadva118ms96992 KiB
68Elfogadva120ms95864 KiB
69Elfogadva300ms109528 KiB
70Időlimit túllépés481ms43308 KiB