最长非降子序列的N*logN解法
2024-09-06 19:56:38
之前讲到过求最长非降子序列的O(N^2)解法。 链接
这次在原来的基础上介绍一下N*logN解法。
该解法主要是维护一个数组minValue,minValue[i]表示最长上身子序列长度为i的数的最小值。
代码如下:
#include <iostream>
using namespace std;
#define inf (1<<29)
const int maxn = 100100;
int n, a[maxn], minValue[maxn];
int getIndex(int R, int x)
{
int L = 0;
while (L <= R)
{
int mid = (L + R) / 2;
if (minValue[mid] < x)
L = mid + 1;
else
R = mid - 1;
}
return L - 1;
}
int main()
{
cin >> n;
for (int i = 0; i < n; i ++)
cin >> a[i];
minValue[0] = 0;
for (int i = 1; i <= n; i ++)
minValue[i] = inf;
int R = 0;
for (int i = 0; i < n; i ++)
{
int idx = getIndex(R, a[i]);
if (idx+1 > R)
R = idx + 1;
minValue[idx+1] = min(minValue[idx+1], a[i]);
}
cout << R << endl;
return 0;
}
最新文章
- 【WPF】 通过FarPoint显示Excel
- tomcat管理员配置
- iOS开发UITableView基本使用方法总结1
- 微软发布WP SDK8.0 新增语音、应用内支付等原生API
- doj常用包
- jni java和C之间的值传递(int String int[])
- 【Python】Coding the Matrix:Week 5 Perspective Lab
- css3瀑布流
- Chrome中xpath表达式巧妙获取
- POJ 3261 可重叠k次最长重复子串
- DP的优化总结
- WebApi 运行原理
- ----关于css中常见单位----
- 网页布局设计css中单位px和em,rem的区别
- java中网络设置代理
- ORM版学员管理系统1
- java 把被检查的异常转换为不检查的异常
- VNC的安装和常用命令
- bat中的“多线程”处理代码
- C#程序集系列06,程序集清单,EXE和DLL的区别