lis最长上升子序列
2024-09-16 12:12:35
因为是最长上升的,可以用一个数组储存上升的序列,如果后一个数字比数组的最大数字还大,就加到末尾去,如果不大于,那么就可以把这个数组中比他大的数字替换掉,因为如果数字更小,后面上升序列更长的可能性更大,这样也不会改变之前最大的数字;最小同理
#include<iostream>
#include<cstdio>
#include<algorithm>
#define sf scanf
#define pf printf
#define rep(i,a,b) for(int i=a;i<b;i++)
#define per(i,a,b) for(int i=a;i>=b;i--)
using namespace std;
int a[100005];
int low[100005];
int h[100005];
int find(int le,int x)
{
int l=1,r=le,mid;
while(r>l)
{
mid=(l+r)/2;
if(x>=h[mid])
r=mid;
else
l=mid+1;
}
return l;
}
int main()
{
int n,ans=1;
sf("%d",&n);
rep(i,1,n+1)
sf("%d",&a[i]);
// low[1]=a[1];//上升的
// rep(i,2,n+1)
// {
// if(low[ans]<a[i])
// low[++ans]=a[i];
// else
// {
// int j=lower_bound(low+1,low+ans+1,a[i])-low;
// low[j]=a[i];
// }
// }
int ans1=1;//下降的
h[1]=a[1];
rep(i,2,n+1)
{
if(h[ans1]>a[i])
h[++ans1]=a[i];
else
{
int j=find(ans1,a[i]);
h[j]=a[i];
}
}
pf("%d\n",ans1);
return 0;
}
最新文章
- 如何去除My97 DatePicker控件上右键弹出官网的链接 - 如何debug混淆过的代码
- 转 如何理解 重要性采样(importance sampling)
- Java中多线程使用匿名内部类的方式进行创建3种方式
- 【转】 FPGA设计的四种常用思想与技巧
- 在 eclipse 中设置每行的字数
- 排他锁Lock
- Blogger支持Mobile行动版网页 - Blog透视镜
- Windows 桌面边栏小工具开发入门
- java覆写hashcode方法
- JPA的学习
- 如何使用kafka增加topic的备份数量,让业务更上一层楼
- Mongo基础 索引的使用
- Finance财务软件(自定义报表专题)
- Javascript中Base64编码解码的使用实例
- uva-10420-排序
- Entity Framework的几种初始化器
- vmdk->;vhdx
- ExecutorService的四种线程池
- [i.MX6q]i.MX6q处理器,linux操作系统平台搭建 从SD卡启动系统
- Visual Studio Code调试electron主进程