题目描述 Description
n有n种石块,石块能无限供应。每种石块都是长方体,其中第i种石块的长、宽、高分别为li、wi、hi。石块可以旋转,使得其中两维成为长度和宽度,第三维成为高度。如果要把一个石块放在另一个石块上面,必须保证上面石块的长和宽都分别严格小于下面石块的长和宽。这意味着,即使两块长宽相同的石块也不能堆砌起来。
现在神犇想知道,最多能用上多少块石头呢?

 
输入描述 Input Description

第一行,N; 
以下N行,每行三个数,表示第i种石头的长宽高。

输出描述 Output Description

一个整数,表示最多能用上多少块石头。

样例输入 Sample Input
3
1 1 1
2 2 2
3 3 4
样例输出 Sample Output

3

数据范围及提示 Data Size & Hint

N≤50000,其余数字≤maxlongint。

/*
二分的最长严格上升子序列,因为是严格的,所以按照a排序时,b要从大
到小排,曾经试过二维的,但怎么改都不对。
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#define M 300010
using namespace std;
int f[M],cnt;
struct node
{
int a,b;
};node e[M];
int n;
bool cmp(const node&x,const node&y)
{
if(x.a<y.a)return ;
if(x.a==y.a&&x.b>y.b)return ;
return ;
}
int erfen(int l,int r,int x)
{
while(l<=r)
{
int mid=(l+r)/;
if(f[mid]>=x)r=mid-;
else l=mid+;
}
return l;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
e[++cnt].a=x;e[cnt].b=y;e[++cnt].a=y;e[cnt].b=x;
e[++cnt].a=x;e[cnt].b=z;e[++cnt].a=z;e[cnt].b=x;
e[++cnt].a=y;e[cnt].b=z;e[++cnt].a=z;e[cnt].b=y;
}
sort(e+,e+cnt+,cmp);
f[]=e[].b;int len=;
for(int i=;i<=cnt;i++)
if(e[i].b>f[len])
f[++len]=e[i].b;
else
{
int pos=erfen(,len,e[i].b);
f[pos]=e[i].b;
}
printf("%d",len);
return ;
}

最新文章

  1. MFC像窗体坐标位置发送 点击消息
  2. .NET Core爬坑记 1.0 项目文件
  3. 又是周六了-MySQL特训
  4. HTML布局与框架
  5. UVa 1584 Circular Sequence --- 水题
  6. android学习笔记26——Activity
  7. 用inno Setup制作web项目安装包
  8. CAPI HTTP服务搭建(文件在本机)
  9. 关于Web与JS
  10. Apple移动设备处理器指令集 armv6、armv7、armv7s及arm64-b
  11. 数据库连接超时和go away、如何检测数据库的最大连接数
  12. Spring注解的使用和区别:@Component、@Service、@Repository、@Controller
  13. 用H5实现微信的四个界面
  14. Tasks and Back stack 详解
  15. Oauth认证协议
  16. Django之Orm的各种操作
  17. xpath解析html
  18. 电脑小知识-win10
  19. linux基础实操四
  20. JS函数、变量作用域

热门文章

  1. windows 迁移数据库
  2. python的des和3des加解密
  3. Android SDK镜像更新网速慢的解决问题
  4. SQL将查询出来的多列的值拼接成一个字符串
  5. java-IO操作性能对比
  6. 网络基础编程_5.4聊天室-IOCP服务器
  7. Python2和Python3除法
  8. LeetCode887鸡蛋掉落——dp
  9. deallocvt - 释放未使用的虚拟终端
  10. webstorm 设置ES6语法支持以及添加vuejs开发配置