107362024-04-10 23:27:3642Főnökszámpython3Időlimit túllépés 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()
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva19ms12640 KiB
2Időlimit túllépés460ms4792 KiB
subtask25/5
3Elfogadva19ms13136 KiB
4Elfogadva19ms13204 KiB
5Elfogadva25ms13912 KiB
6Elfogadva76ms13976 KiB
subtask310/10
7Elfogadva18ms13628 KiB
8Elfogadva19ms13488 KiB
9Elfogadva21ms13412 KiB
10Elfogadva21ms13528 KiB
11Elfogadva25ms13564 KiB
12Elfogadva28ms13776 KiB
13Elfogadva46ms14192 KiB
14Elfogadva64ms14668 KiB
subtask40/10
15Elfogadva18ms14060 KiB
16Elfogadva19ms14424 KiB
17Elfogadva32ms14488 KiB
18Elfogadva37ms14940 KiB
19Elfogadva109ms15088 KiB
20Elfogadva202ms15552 KiB
21Elfogadva193ms15632 KiB
22Időlimit túllépés469ms8056 KiB
subtask50/25
23Elfogadva24ms14884 KiB
24Elfogadva28ms15208 KiB
25Elfogadva46ms15664 KiB
26Elfogadva64ms15540 KiB
27Időlimit túllépés453ms16004 KiB
28Időlimit túllépés456ms7232 KiB
29Időlimit túllépés467ms7296 KiB
30Időlimit túllépés463ms7012 KiB
subtask60/50
31Elfogadva18ms15132 KiB
32Időlimit túllépés500ms7104 KiB
33Elfogadva19ms13136 KiB
34Elfogadva19ms13204 KiB
35Elfogadva25ms13912 KiB
36Elfogadva76ms13976 KiB
37Elfogadva18ms13628 KiB
38Elfogadva19ms13488 KiB
39Elfogadva21ms13412 KiB
40Elfogadva21ms13528 KiB
41Elfogadva25ms13564 KiB
42Elfogadva28ms13776 KiB
43Elfogadva46ms14192 KiB
44Elfogadva64ms14668 KiB
45Elfogadva18ms14060 KiB
46Elfogadva19ms14424 KiB
47Elfogadva32ms14488 KiB
48Elfogadva37ms14940 KiB
49Elfogadva109ms15088 KiB
50Elfogadva202ms15552 KiB
51Elfogadva193ms15632 KiB
52Időlimit túllépés469ms8056 KiB
53Elfogadva24ms14884 KiB
54Elfogadva28ms15208 KiB
55Elfogadva46ms15664 KiB
56Elfogadva64ms15540 KiB
57Időlimit túllépés453ms16004 KiB
58Időlimit túllépés456ms7232 KiB
59Időlimit túllépés467ms7296 KiB
60Időlimit túllépés463ms7012 KiB
61Elfogadva67ms15684 KiB
62Elfogadva92ms15712 KiB
63Elfogadva65ms15672 KiB
64Időlimit túllépés462ms8560 KiB
65Elfogadva65ms15828 KiB
66Elfogadva61ms15592 KiB
67Elfogadva64ms15888 KiB
68Elfogadva64ms15924 KiB
69Időlimit túllépés462ms7296 KiB
70Időlimit túllépés460ms8752 KiB