107362024-04-10 23:27:3642Főnökszámpython3Time limit exceeded 15/100500ms16004 KiB
from sys import stdin
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))
    print(1)

    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)
        print(len(L))
        
main()
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted19ms12640 KiB
2Time limit exceeded460ms4792 KiB
subtask25/5
3Accepted19ms13136 KiB
4Accepted19ms13204 KiB
5Accepted25ms13912 KiB
6Accepted76ms13976 KiB
subtask310/10
7Accepted18ms13628 KiB
8Accepted19ms13488 KiB
9Accepted21ms13412 KiB
10Accepted21ms13528 KiB
11Accepted25ms13564 KiB
12Accepted28ms13776 KiB
13Accepted46ms14192 KiB
14Accepted64ms14668 KiB
subtask40/10
15Accepted18ms14060 KiB
16Accepted19ms14424 KiB
17Accepted32ms14488 KiB
18Accepted37ms14940 KiB
19Accepted109ms15088 KiB
20Accepted202ms15552 KiB
21Accepted193ms15632 KiB
22Time limit exceeded469ms8056 KiB
subtask50/25
23Accepted24ms14884 KiB
24Accepted28ms15208 KiB
25Accepted46ms15664 KiB
26Accepted64ms15540 KiB
27Time limit exceeded453ms16004 KiB
28Time limit exceeded456ms7232 KiB
29Time limit exceeded467ms7296 KiB
30Time limit exceeded463ms7012 KiB
subtask60/50
31Accepted18ms15132 KiB
32Time limit exceeded500ms7104 KiB
33Accepted19ms13136 KiB
34Accepted19ms13204 KiB
35Accepted25ms13912 KiB
36Accepted76ms13976 KiB
37Accepted18ms13628 KiB
38Accepted19ms13488 KiB
39Accepted21ms13412 KiB
40Accepted21ms13528 KiB
41Accepted25ms13564 KiB
42Accepted28ms13776 KiB
43Accepted46ms14192 KiB
44Accepted64ms14668 KiB
45Accepted18ms14060 KiB
46Accepted19ms14424 KiB
47Accepted32ms14488 KiB
48Accepted37ms14940 KiB
49Accepted109ms15088 KiB
50Accepted202ms15552 KiB
51Accepted193ms15632 KiB
52Time limit exceeded469ms8056 KiB
53Accepted24ms14884 KiB
54Accepted28ms15208 KiB
55Accepted46ms15664 KiB
56Accepted64ms15540 KiB
57Time limit exceeded453ms16004 KiB
58Time limit exceeded456ms7232 KiB
59Time limit exceeded467ms7296 KiB
60Time limit exceeded463ms7012 KiB
61Accepted67ms15684 KiB
62Accepted92ms15712 KiB
63Accepted65ms15672 KiB
64Time limit exceeded462ms8560 KiB
65Accepted65ms15828 KiB
66Accepted61ms15592 KiB
67Accepted64ms15888 KiB
68Accepted64ms15924 KiB
69Time limit exceeded462ms7296 KiB
70Time limit exceeded460ms8752 KiB