107432024-04-10 23:52:3142Főnökszámpypy3Time limit exceeded 40/100477ms117120 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 = 2000

    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()
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted45ms80684 KiB
2Accepted270ms106756 KiB
subtask25/5
3Accepted45ms81104 KiB
4Accepted46ms80840 KiB
5Accepted75ms88604 KiB
6Accepted107ms93508 KiB
subtask310/10
7Accepted43ms81368 KiB
8Accepted56ms87880 KiB
9Accepted61ms89096 KiB
10Accepted65ms86548 KiB
11Accepted87ms90904 KiB
12Accepted82ms89988 KiB
13Accepted108ms93940 KiB
14Accepted115ms95652 KiB
subtask40/10
15Accepted45ms82680 KiB
16Accepted48ms82080 KiB
17Accepted83ms90940 KiB
18Accepted104ms94804 KiB
19Accepted112ms94776 KiB
20Accepted131ms96304 KiB
21Accepted141ms96956 KiB
22Time limit exceeded460ms40992 KiB
subtask525/25
23Accepted71ms89360 KiB
24Accepted83ms90076 KiB
25Accepted108ms95432 KiB
26Accepted128ms94780 KiB
27Accepted192ms103392 KiB
28Accepted226ms104960 KiB
29Accepted256ms106780 KiB
30Accepted259ms107340 KiB
subtask60/50
31Accepted45ms82672 KiB
32Accepted277ms108988 KiB
33Accepted45ms81104 KiB
34Accepted46ms80840 KiB
35Accepted75ms88604 KiB
36Accepted107ms93508 KiB
37Accepted43ms81368 KiB
38Accepted56ms87880 KiB
39Accepted61ms89096 KiB
40Accepted65ms86548 KiB
41Accepted87ms90904 KiB
42Accepted82ms89988 KiB
43Accepted108ms93940 KiB
44Accepted115ms95652 KiB
45Accepted45ms82680 KiB
46Accepted48ms82080 KiB
47Accepted83ms90940 KiB
48Accepted104ms94804 KiB
49Accepted112ms94776 KiB
50Accepted131ms96304 KiB
51Accepted141ms96956 KiB
52Time limit exceeded460ms40992 KiB
53Accepted71ms89360 KiB
54Accepted83ms90076 KiB
55Accepted108ms95432 KiB
56Accepted128ms94780 KiB
57Accepted192ms103392 KiB
58Accepted226ms104960 KiB
59Accepted256ms106780 KiB
60Accepted259ms107340 KiB
61Accepted114ms94960 KiB
62Accepted286ms115276 KiB
63Accepted115ms95252 KiB
64Time limit exceeded425ms117120 KiB
65Accepted119ms96496 KiB
66Accepted115ms95444 KiB
67Accepted115ms95860 KiB
68Accepted111ms94336 KiB
69Accepted307ms109528 KiB
70Time limit exceeded477ms42392 KiB