LIS之贪心加二分,,求最大长---记录路径(待检验--欢迎提供数据)
2016-07-25 09:40
447 查看
用
8
1 4 7 9 6 2 7 8
检测到方法一错误--
方法二在本次测试中正确==
方法二还待测
8
1 4 7 9 6 2 7 8
检测到方法一错误--
方法二在本次测试中正确==
方法二还待测
#include<cstdio> #include<vector> #include<cstring> #include<algorithm> using namespace std; bool fafe[100100]; int n,kk; int shu[100100]; int kp[100100]; int hao[100100]; int chu[100100]; int zhao(int xx) { int l=0,r=kk-1,mid,ans=0; while (r>=l) { mid=(l+r)/2; if (kp[mid]>=xx) { ans=mid; r=mid-1; } else l=mid+1; } return ans; } int main() { while (~scanf("%d",&n)) { kk=0; memset(kp,0x3f3f3f,sizeof(kp)); memset(hao,0,sizeof(hao)); memset(fafe,false,sizeof(fafe)); for (int i=0;i<n;i++) { scanf("%d",&shu[i]); if (kk) { if (shu[i]>kp[kk-1]) { chu[kk]=shu[i]; hao[kk]=i; kp[kk++]=shu[i]; int op=kk-2; /*while (fafe[op])//一 { chu[op]=kp[op]; fafe[op]=false; if (op) op--; }*/ /*while (fafe[op]&&hao[op]<hao[op+1])//二 { printf("%d %d %d\n",op,kp[op],chu[op+1]); chu[op]=kp[op]; fafe[op]=false; if (op) op--; }*/ } else { int oppo=zhao(shu[i]); fafe[oppo]=true; hao[oppo]=i; kp[oppo]=shu[i]; } } else { chu[kk]=shu[i]; hao[kk]=i; kp[kk++]=shu[i]; } } printf("%d\n",kk); for (int i=0;i<kk;i++) printf("%d ",chu[i]); } return 0; }
相关文章推荐
- C语言课程设计(这个没在老师给定的题目内)——实用的作答题目小代码
- iOS中获取各种文件的目录路径的方法
- URI URL URN之间的区别
- 测试BASHshe'll
- 会话保持功能介绍
- 最基础的java面试
- Error:(4, 0) Gradle DSL method not found: 'classpath()' Possible causes: The project 'workspace-64'
- Delphi 快捷键
- linux su和sudo命令的区别
- iOS开发使用半透明模糊效果方法整理
- 线程、多线程与线程池
- 关键字
- js获取select标签选中的值
- PAT 乙级1004. 成绩排名 (JAVA版)
- LeetCode[343] Integer Break
- DotNet 资源大全中文版,内容包括:编译器、压缩、应用框架、应用模板、加密、数据库、反编译、IDE、日志、风格指南等
- Thinking in Java 第18章 Java I/O 系统(18.9-18.14)
- nosql之mongodb简单安装与命令使用
- HDU 5747 Aaronson(贪心)
- Android图像处理—xfermode