107392024-04-10 23:39:4542Főnökszámpypy3Time limit exceeded 40/100469ms115172 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 = 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
1Accepted45ms80284 KiB
2Accepted275ms106916 KiB
subtask25/5
3Accepted43ms81224 KiB
4Accepted46ms81152 KiB
5Accepted75ms88556 KiB
6Accepted107ms93480 KiB
subtask310/10
7Accepted43ms81792 KiB
8Accepted56ms87932 KiB
9Accepted63ms89708 KiB
10Accepted57ms86444 KiB
11Accepted83ms89988 KiB
12Accepted82ms89612 KiB
13Accepted107ms93604 KiB
14Accepted115ms95588 KiB
subtask40/10
15Accepted43ms82340 KiB
16Accepted46ms82028 KiB
17Accepted85ms90880 KiB
18Accepted105ms94764 KiB
19Accepted114ms94948 KiB
20Accepted130ms96800 KiB
21Accepted138ms96876 KiB
22Time limit exceeded469ms39276 KiB
subtask525/25
23Accepted71ms89180 KiB
24Accepted83ms90020 KiB
25Accepted108ms95384 KiB
26Accepted128ms94860 KiB
27Accepted190ms102932 KiB
28Accepted225ms104704 KiB
29Accepted257ms106660 KiB
30Accepted259ms107288 KiB
subtask60/50
31Accepted43ms82440 KiB
32Accepted272ms108596 KiB
33Accepted43ms81224 KiB
34Accepted46ms81152 KiB
35Accepted75ms88556 KiB
36Accepted107ms93480 KiB
37Accepted43ms81792 KiB
38Accepted56ms87932 KiB
39Accepted63ms89708 KiB
40Accepted57ms86444 KiB
41Accepted83ms89988 KiB
42Accepted82ms89612 KiB
43Accepted107ms93604 KiB
44Accepted115ms95588 KiB
45Accepted43ms82340 KiB
46Accepted46ms82028 KiB
47Accepted85ms90880 KiB
48Accepted105ms94764 KiB
49Accepted114ms94948 KiB
50Accepted130ms96800 KiB
51Accepted138ms96876 KiB
52Time limit exceeded469ms39276 KiB
53Accepted71ms89180 KiB
54Accepted83ms90020 KiB
55Accepted108ms95384 KiB
56Accepted128ms94860 KiB
57Accepted190ms102932 KiB
58Accepted225ms104704 KiB
59Accepted257ms106660 KiB
60Accepted259ms107288 KiB
61Accepted115ms94832 KiB
62Accepted284ms115172 KiB
63Accepted115ms95404 KiB
64Time limit exceeded423ms114160 KiB
65Accepted122ms96284 KiB
66Accepted116ms95328 KiB
67Accepted114ms95656 KiB
68Accepted111ms94292 KiB
69Accepted314ms109256 KiB
70Time limit exceeded469ms40756 KiB