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()
| Subtask | Sum | Test | Verdict | Time | Memory | ||
|---|---|---|---|---|---|---|---|
| subtask1 | 0/0 | ||||||
| 1 | Accepted | 46ms | 80344 KiB | ||||
| 2 | Accepted | 296ms | 115460 KiB | ||||
| subtask2 | 5/5 | ||||||
| 3 | Accepted | 45ms | 80832 KiB | ||||
| 4 | Accepted | 48ms | 80992 KiB | ||||
| 5 | Accepted | 82ms | 88084 KiB | ||||
| 6 | Accepted | 119ms | 94596 KiB | ||||
| subtask3 | 10/10 | ||||||
| 7 | Accepted | 45ms | 81268 KiB | ||||
| 8 | Accepted | 57ms | 88320 KiB | ||||
| 9 | Accepted | 71ms | 89872 KiB | ||||
| 10 | Accepted | 68ms | 87192 KiB | ||||
| 11 | Accepted | 96ms | 91404 KiB | ||||
| 12 | Accepted | 97ms | 91048 KiB | ||||
| 13 | Accepted | 122ms | 96272 KiB | ||||
| 14 | Accepted | 136ms | 95688 KiB | ||||
| subtask4 | 0/10 | ||||||
| 15 | Accepted | 54ms | 82588 KiB | ||||
| 16 | Accepted | 54ms | 83304 KiB | ||||
| 17 | Accepted | 93ms | 91116 KiB | ||||
| 18 | Accepted | 123ms | 95700 KiB | ||||
| 19 | Accepted | 128ms | 97312 KiB | ||||
| 20 | Accepted | 156ms | 99188 KiB | ||||
| 21 | Accepted | 180ms | 99240 KiB | ||||
| 22 | Time limit exceeded | 469ms | 42888 KiB | ||||
| subtask5 | 25/25 | ||||||
| 23 | Accepted | 75ms | 92048 KiB | ||||
| 24 | Accepted | 89ms | 92648 KiB | ||||
| 25 | Accepted | 120ms | 97356 KiB | ||||
| 26 | Accepted | 127ms | 98216 KiB | ||||
| 27 | Accepted | 207ms | 106960 KiB | ||||
| 28 | Accepted | 250ms | 113888 KiB | ||||
| 29 | Accepted | 282ms | 116292 KiB | ||||
| 30 | Accepted | 286ms | 116204 KiB | ||||
| subtask6 | 0/50 | ||||||
| 31 | Accepted | 45ms | 84388 KiB | ||||
| 32 | Accepted | 305ms | 118888 KiB | ||||
| 33 | Accepted | 45ms | 80832 KiB | ||||
| 34 | Accepted | 48ms | 80992 KiB | ||||
| 35 | Accepted | 82ms | 88084 KiB | ||||
| 36 | Accepted | 119ms | 94596 KiB | ||||
| 37 | Accepted | 45ms | 81268 KiB | ||||
| 38 | Accepted | 57ms | 88320 KiB | ||||
| 39 | Accepted | 71ms | 89872 KiB | ||||
| 40 | Accepted | 68ms | 87192 KiB | ||||
| 41 | Accepted | 96ms | 91404 KiB | ||||
| 42 | Accepted | 97ms | 91048 KiB | ||||
| 43 | Accepted | 122ms | 96272 KiB | ||||
| 44 | Accepted | 136ms | 95688 KiB | ||||
| 45 | Accepted | 54ms | 82588 KiB | ||||
| 46 | Accepted | 54ms | 83304 KiB | ||||
| 47 | Accepted | 93ms | 91116 KiB | ||||
| 48 | Accepted | 123ms | 95700 KiB | ||||
| 49 | Accepted | 128ms | 97312 KiB | ||||
| 50 | Accepted | 156ms | 99188 KiB | ||||
| 51 | Accepted | 180ms | 99240 KiB | ||||
| 52 | Time limit exceeded | 469ms | 42888 KiB | ||||
| 53 | Accepted | 75ms | 92048 KiB | ||||
| 54 | Accepted | 89ms | 92648 KiB | ||||
| 55 | Accepted | 120ms | 97356 KiB | ||||
| 56 | Accepted | 127ms | 98216 KiB | ||||
| 57 | Accepted | 207ms | 106960 KiB | ||||
| 58 | Accepted | 250ms | 113888 KiB | ||||
| 59 | Accepted | 282ms | 116292 KiB | ||||
| 60 | Accepted | 286ms | 116204 KiB | ||||
| 61 | Accepted | 126ms | 98028 KiB | ||||
| 62 | Accepted | 264ms | 105756 KiB | ||||
| 63 | Accepted | 126ms | 97548 KiB | ||||
| 64 | Time limit exceeded | 462ms | 42724 KiB | ||||
| 65 | Accepted | 129ms | 97344 KiB | ||||
| 66 | Accepted | 123ms | 97076 KiB | ||||
| 67 | Accepted | 125ms | 98548 KiB | ||||
| 68 | Accepted | 123ms | 98088 KiB | ||||
| 69 | Accepted | 326ms | 117252 KiB | ||||
| 70 | Time limit exceeded | 462ms | 43684 KiB | ||||