poj 1631 LIS nlogn
2016-07-07 20:10
459 查看
点击打开链接
#include <iostream>
#include <algorithm>
using namespace std;
const int M=41000;
const int inf=1<<30;
int n,a[M],dp[M]; // dp[i] 以i结尾的 LIS长度
//no two signals cross.
// 等价于 i<j a[i]<a[j] 才不会Cross
// finds the maximum number of signals which may be connected on the silicon surface without crossing each other
// 即求序列中的LIS
int g[M]; // g[i] LIS长度为i 的最小结尾 x
int fun(int x)
{
int f=1,l=n,mid,pos;
while(f<l)
{
mid=(f+l)/2;
if(g[mid]<x)
{
f=mid+1;
pos=f;
}
else
{
l=mid;
pos=l;
}
}
return pos;
}
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>n;
for(int i=1;i<=n;i++)
{
g[i]=inf; //
}
int ans=1;
cin>>a[1];
g[1]=a[1];
for(int i=2;i<=n;i++)
{
cin>>a[i];
int k=fun(a[i]); // 找到第一个大于a[i] g[k] : 所以以a[i]结尾的LIS长度为 k-1+1 (a[i]添加在以g[k-1]的LIS之后)
ans=max(ans,k);
g[k]=a[i]; //更新
}
cout<<ans<<endl;
}
return 0;
}
#include <iostream>
#include <algorithm>
using namespace std;
const int M=41000;
const int inf=1<<30;
int n,a[M],dp[M]; // dp[i] 以i结尾的 LIS长度
//no two signals cross.
// 等价于 i<j a[i]<a[j] 才不会Cross
// finds the maximum number of signals which may be connected on the silicon surface without crossing each other
// 即求序列中的LIS
int g[M]; // g[i] LIS长度为i 的最小结尾 x
int fun(int x)
{
int f=1,l=n,mid,pos;
while(f<l)
{
mid=(f+l)/2;
if(g[mid]<x)
{
f=mid+1;
pos=f;
}
else
{
l=mid;
pos=l;
}
}
return pos;
}
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>n;
for(int i=1;i<=n;i++)
{
g[i]=inf; //
}
int ans=1;
cin>>a[1];
g[1]=a[1];
for(int i=2;i<=n;i++)
{
cin>>a[i];
int k=fun(a[i]); // 找到第一个大于a[i] g[k] : 所以以a[i]结尾的LIS长度为 k-1+1 (a[i]添加在以g[k-1]的LIS之后)
ans=max(ans,k);
g[k]=a[i]; //更新
}
cout<<ans<<endl;
}
return 0;
}
相关文章推荐
- POJ 3160 Father Christmas flymouse Tarjon+DP
- /subsystem:windows 与 /subsystem:console
- ACM中的博弈论入门(四)POJ 2068 动态规划处理的博弈
- java基础学习总结——接口
- WebView使用过程中你该知道的二三事
- Python中lambda表达式学习
- JMS之activemq的安装与使用
- Libevent学习笔记(四) bufferevent 的 concepts and basics
- Codeforces Round #361 (Div. 2) E. Mike and Geometry Problem 离散化 排列组合
- React Mixin 双向绑定 及 源码分析
- query相关搜索词&推荐
- 在cmd命令行下编译运行C/C++源文件
- windows与linux换行符
- http://www.ibm.com/developerworks/cn/java/j-lo-junit-src/
- linux 下安装开发组件包
- QML之窗口(无边框、透明及拖拽)
- 二叉排序树的实现
- 虚拟机一些常见的错误
- http://my.oschina.net/pangyangyang/blog/144495
- Mac锁屏