107412024-04-10 23:42:4842Főnökszámpypy3Time limit exceeded 40/100472ms116684 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()
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted54ms80564 KiB
2Accepted280ms106888 KiB
subtask25/5
3Accepted52ms80924 KiB
4Accepted54ms81752 KiB
5Accepted85ms89040 KiB
6Accepted115ms93728 KiB
subtask310/10
7Accepted52ms81692 KiB
8Accepted64ms88000 KiB
9Accepted65ms89460 KiB
10Accepted57ms86452 KiB
11Accepted85ms90740 KiB
12Accepted90ms89780 KiB
13Accepted111ms94000 KiB
14Accepted125ms96044 KiB
subtask40/10
15Accepted48ms82984 KiB
16Accepted54ms82792 KiB
17Accepted107ms91660 KiB
18Accepted129ms95420 KiB
19Accepted123ms95360 KiB
20Accepted143ms97272 KiB
21Accepted150ms97884 KiB
22Time limit exceeded421ms38480 KiB
subtask525/25
23Accepted81ms90192 KiB
24Accepted93ms91056 KiB
25Accepted112ms96328 KiB
26Accepted140ms96156 KiB
27Accepted202ms104748 KiB
28Accepted240ms105332 KiB
29Accepted268ms108048 KiB
30Accepted293ms108636 KiB
subtask60/50
31Accepted52ms84084 KiB
32Accepted273ms110160 KiB
33Accepted52ms80924 KiB
34Accepted54ms81752 KiB
35Accepted85ms89040 KiB
36Accepted115ms93728 KiB
37Accepted52ms81692 KiB
38Accepted64ms88000 KiB
39Accepted65ms89460 KiB
40Accepted57ms86452 KiB
41Accepted85ms90740 KiB
42Accepted90ms89780 KiB
43Accepted111ms94000 KiB
44Accepted125ms96044 KiB
45Accepted48ms82984 KiB
46Accepted54ms82792 KiB
47Accepted107ms91660 KiB
48Accepted129ms95420 KiB
49Accepted123ms95360 KiB
50Accepted143ms97272 KiB
51Accepted150ms97884 KiB
52Time limit exceeded421ms38480 KiB
53Accepted81ms90192 KiB
54Accepted93ms91056 KiB
55Accepted112ms96328 KiB
56Accepted140ms96156 KiB
57Accepted202ms104748 KiB
58Accepted240ms105332 KiB
59Accepted268ms108048 KiB
60Accepted293ms108636 KiB
61Accepted125ms96388 KiB
62Accepted300ms116684 KiB
63Accepted125ms96948 KiB
64Time limit exceeded437ms116480 KiB
65Accepted130ms98008 KiB
66Accepted126ms96712 KiB
67Accepted119ms97152 KiB
68Accepted120ms96100 KiB
69Accepted337ms111104 KiB
70Time limit exceeded472ms42116 KiB