107402024-04-10 23:42:0142Főnökszámpypy3Időlimit túllépés 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()
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva45ms80332 KiB
2Elfogadva280ms107020 KiB
subtask25/5
3Elfogadva52ms80984 KiB
4Elfogadva50ms81032 KiB
5Elfogadva85ms89228 KiB
6Elfogadva109ms94048 KiB
subtask310/10
7Elfogadva52ms82296 KiB
8Elfogadva64ms88432 KiB
9Elfogadva71ms90432 KiB
10Elfogadva61ms87392 KiB
11Elfogadva85ms91384 KiB
12Elfogadva104ms90840 KiB
13Elfogadva111ms94524 KiB
14Elfogadva126ms96696 KiB
subtask40/10
15Elfogadva52ms83720 KiB
16Elfogadva54ms84076 KiB
17Elfogadva89ms92440 KiB
18Elfogadva115ms96120 KiB
19Elfogadva116ms96708 KiB
20Elfogadva131ms98584 KiB
21Elfogadva166ms98552 KiB
22Időlimit túllépés486ms38792 KiB
subtask525/25
23Elfogadva75ms91512 KiB
24Elfogadva92ms92352 KiB
25Elfogadva119ms97256 KiB
26Elfogadva157ms97696 KiB
27Elfogadva202ms104932 KiB
28Elfogadva250ms106564 KiB
29Elfogadva273ms108672 KiB
30Elfogadva277ms109232 KiB
subtask60/50
31Elfogadva52ms84228 KiB
32Elfogadva273ms110760 KiB
33Elfogadva52ms80984 KiB
34Elfogadva50ms81032 KiB
35Elfogadva85ms89228 KiB
36Elfogadva109ms94048 KiB
37Elfogadva52ms82296 KiB
38Elfogadva64ms88432 KiB
39Elfogadva71ms90432 KiB
40Elfogadva61ms87392 KiB
41Elfogadva85ms91384 KiB
42Elfogadva104ms90840 KiB
43Elfogadva111ms94524 KiB
44Elfogadva126ms96696 KiB
45Elfogadva52ms83720 KiB
46Elfogadva54ms84076 KiB
47Elfogadva89ms92440 KiB
48Elfogadva115ms96120 KiB
49Elfogadva116ms96708 KiB
50Elfogadva131ms98584 KiB
51Elfogadva166ms98552 KiB
52Időlimit túllépés486ms38792 KiB
53Elfogadva75ms91512 KiB
54Elfogadva92ms92352 KiB
55Elfogadva119ms97256 KiB
56Elfogadva157ms97696 KiB
57Elfogadva202ms104932 KiB
58Elfogadva250ms106564 KiB
59Elfogadva273ms108672 KiB
60Elfogadva277ms109232 KiB
61Elfogadva140ms96672 KiB
62Elfogadva333ms117016 KiB
63Elfogadva125ms97052 KiB
64Időlimit túllépés455ms113272 KiB
65Elfogadva125ms98544 KiB
66Elfogadva125ms97284 KiB
67Elfogadva119ms97716 KiB
68Elfogadva120ms96324 KiB
69Elfogadva314ms111424 KiB
70Időlimit túllépés481ms40560 KiB