107402024-04-10 23:42:0142Főnökszámpypy3Time limit exceeded 40/100486ms117016 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 = 500

    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
1Accepted45ms80332 KiB
2Accepted280ms107020 KiB
subtask25/5
3Accepted52ms80984 KiB
4Accepted50ms81032 KiB
5Accepted85ms89228 KiB
6Accepted109ms94048 KiB
subtask310/10
7Accepted52ms82296 KiB
8Accepted64ms88432 KiB
9Accepted71ms90432 KiB
10Accepted61ms87392 KiB
11Accepted85ms91384 KiB
12Accepted104ms90840 KiB
13Accepted111ms94524 KiB
14Accepted126ms96696 KiB
subtask40/10
15Accepted52ms83720 KiB
16Accepted54ms84076 KiB
17Accepted89ms92440 KiB
18Accepted115ms96120 KiB
19Accepted116ms96708 KiB
20Accepted131ms98584 KiB
21Accepted166ms98552 KiB
22Time limit exceeded486ms38792 KiB
subtask525/25
23Accepted75ms91512 KiB
24Accepted92ms92352 KiB
25Accepted119ms97256 KiB
26Accepted157ms97696 KiB
27Accepted202ms104932 KiB
28Accepted250ms106564 KiB
29Accepted273ms108672 KiB
30Accepted277ms109232 KiB
subtask60/50
31Accepted52ms84228 KiB
32Accepted273ms110760 KiB
33Accepted52ms80984 KiB
34Accepted50ms81032 KiB
35Accepted85ms89228 KiB
36Accepted109ms94048 KiB
37Accepted52ms82296 KiB
38Accepted64ms88432 KiB
39Accepted71ms90432 KiB
40Accepted61ms87392 KiB
41Accepted85ms91384 KiB
42Accepted104ms90840 KiB
43Accepted111ms94524 KiB
44Accepted126ms96696 KiB
45Accepted52ms83720 KiB
46Accepted54ms84076 KiB
47Accepted89ms92440 KiB
48Accepted115ms96120 KiB
49Accepted116ms96708 KiB
50Accepted131ms98584 KiB
51Accepted166ms98552 KiB
52Time limit exceeded486ms38792 KiB
53Accepted75ms91512 KiB
54Accepted92ms92352 KiB
55Accepted119ms97256 KiB
56Accepted157ms97696 KiB
57Accepted202ms104932 KiB
58Accepted250ms106564 KiB
59Accepted273ms108672 KiB
60Accepted277ms109232 KiB
61Accepted140ms96672 KiB
62Accepted333ms117016 KiB
63Accepted125ms97052 KiB
64Time limit exceeded455ms113272 KiB
65Accepted125ms98544 KiB
66Accepted125ms97284 KiB
67Accepted119ms97716 KiB
68Accepted120ms96324 KiB
69Accepted314ms111424 KiB
70Time limit exceeded481ms40560 KiB