题目描述:

链接:https://www.nowcoder.com/questionTerminal/55371b74b2f243e3820e57ee4c7b5504
来源:牛客网
小明有一袋子长方形的积木,如果一个积木A的长和宽都不大于另外一个积木B的长和宽,则积木A可以搭在积木B的上面。好奇的小明特别想知道这一袋子积木最多可以搭多少层,你能帮他想想办法吗?
定义每一个长方形的长L和宽W都为正整数,并且1 <= W <= L <= INT_MAX, 袋子里面长方形的个数为N, 并且 1 <= N <= 1000000.
假如袋子里共有5个积木分别为 (2, 2), (2, 4), (3, 3), (2, 5), (4, 5), 则不难判断这些积木最多可以搭成4层, 因为(2, 2) < (2, 4) < (2, 5) < (4, 5)。

输入描述:
第一行为积木的总个数 N
之后一共有N行,分别对应于每一个积木的宽W和长L


输出描述:
输出总共可以搭的层数
示例1

输入

5
2 2
2 4
3 3
2 5
4 5

输出

4

知识点:

1、bisect
 2、
W, L = map(int, input().split())
  arr.append((W, L)) 
arr.append(list(map(int, input().split()))) 
的空间复杂度是不一样的

完整代码:

from bisect import bisect
n = int(input())
arr = []
for _ in range(n):
  W, L = map(int, input().split())
  arr.append((W, L))
arr.sort()
result = []
for ele in arr:
  if not result:
    result.append(ele[1])
  elif result[-1] <= ele[1]:
    result.append(ele[1])
  else:
    index = bisect(result, ele[1])
    result[index] = ele[1]
print(len(result))