LIS
程序员文章站
2022-06-06 14:34:15
...
LIS \operatorname{LIS} LIS
题目链接: AtCoder Chokudai SpeedRun 001 H \operatorname{AtCoder\ Chokudai\ SpeedRun\ 001\ H} AtCoder Chokudai SpeedRun 001 H / luogu AT2827 \operatorname{luogu\ AT2827} luogu AT2827
题目大意
来自洛谷:
样例输入1
5
3 1 5 4 2
样例输出1
2
样例输入2
6
1 2 3 4 5 6
样例输出2
6
样例输入3
7
7 6 5 4 3 2 1
样例输出3
1
样例输入4
20
19 11 10 7 8 9 17 18 20 4 3 15 16 1 5 14 6 2 13 12
样例输出4
6
数据范围
1 ≤ N ≤ 100 , 000 1\leq N\leq 100,000 1≤N≤100,000
思路
就是一道普通的 LIS 。
就按 nlogn 的算法来做即可。
洛谷交不了,可以在 AtCoder 上面交。
代码
#include<cstdio>
#include<iostream>
using namespace std;
int n, a[100001], shang[100001], lef, righ, shang_num;
int main() {
shang[0] = -2147483647;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
if (a[i] > shang[shang_num]) {
shang_num++;
shang[shang_num] = a[i];
}
else {
lef = 0, righ = shang_num;
while (lef < righ) {
int mid = (lef + righ) >> 1;
if (shang[mid] >= a[i]) righ = mid;
else lef = mid + 1;
}
shang[lef] = min(shang[lef], a[i]);
}
}
printf("%d", shang_num);
return 0;
}
上一篇: C# 九九乘法表
推荐阅读
-
最长上升子序列(LIS: Longest Increasing Subsequence)
-
python排序sorted,怎样遍历一个lis?
-
大码女装品牌Garden Lis获数百万天使融资 胖女生的福音!
-
洛谷P1481 魔族密码(LIS)
-
【最长上升子序列LIS+路径记录】HDU-1160 FatMouse's Speed
-
【最长上升子序列LIS】HDU-5532 Almost Sorted Array
-
最长递增子序列LIS和最长公共子序列LCS
-
Codeforces960F - Pathwalks + 最长不下降子序列(LIS)选讲
-
最长上升子序列(LIS总结)
-
P3902 递增(LIS+树状数组)