最长上升子序列【nlogn+路径输出】
发布日期:2021-05-10 10:56:52 浏览次数:19 分类:精选文章

本文共 2367 字,大约阅读时间需要 7 分钟。

������������������������������������

#include 
#include
#include
#include
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 7;
int dp[maxn], pos[maxn], ans[maxn];
int main() {
memset(dp, 0, sizeof(dp));
int n;
cin >> n;
for (int i = 0; i < n; ++i) {
int num;
cin >> num;
arr[i] = num;
}
if (n == 0) {
return 0;
}
dp[1] = arr[0];
int len = 1;
for (int i = 1; i < n; ++i) {
if (arr[i] > dp[len]) {
dp[++len] = arr[i];
pos[i] = len;
} else {
int p = lower_bound(dp + 1, dp + 1 + len, arr[i]) - dp;
dp[p] = arr[i];
pos[i] = p;
}
}
int t = len;
for (int i = n - 1; i >= 0; --i) {
if (len == 0) {
break;
}
if (pos[i] == len) {
ans[len] = i;
--len;
}
}
for (int i = 1; i <= t; ++i) {
cout << arr[ans[i]] << " ";
}
return 0;
}

������������

  • ���������������������������������������������

    ������������������
    <iostream>���
    <algorithm>���
    <functional>���
    <string.h>������������������������������������������������������������������

  • ������������������������������������������ll������������������������maxn���������������������������������������������

  • ���������������������������������������������������������dp���pos���ans������������������������������������������������������

  • ������������������������������n������������������������������������������������arr������

  • ������������������������������������������dp[1]������������len���1������������������������������������������������������

  • ������������������������������������������������������������������������������������������dp���������������������������������������������������������������������������������������������pos���������

  • ���������������������������������������������������������������������������������������������������������������������������������������������������ans������������

  • ������������������������������������������������������dp���������������������������������������������������������������

  • ������������������������������������������������������������������������������������������������������������������������������������������������������������������������

    上一篇:HRBUST 1038——菜鸟和大牛【简单递推】
    下一篇:HDU 5925——Coconuts【离散化 + 求连通块】(2016 东北赛D题)

    发表评论

    最新留言

    表示我来过!
    [***.240.166.169]2025年04月04日 16时46分22秒