当前位置: 首页 > article >正文

【最长上升子序列Ⅱ——树状数组,二分+DP,纯DP】

题目

代码(只给出树状数组的)

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int n, m;
int a[N], b[N], f[N], tr[N]; //f[i]表示以a[i]为尾的LIS的最大长度
void init()
{
    sort(b+1, b+n+1);
    m = unique(b+1, b+n+1) - b - 1;
    for(int i = 1; i <= n; i++)
        a[i] = lower_bound(b+1, b+m+1, a[i]) - b; //离散化,重新按照大小编号为1~m
}
void update(int x, int val)
{
    for(; x <= m; x += x & -x)
        tr[x] = max(tr[x], val);
}
int query(int x)
{
    int retv = 0;
    for(; x; x -= x & -x)
        retv = max(retv, tr[x]);
        
    return retv;
}
int main()
{
    cin >> n;
    for(int i = 1; i <= n; i++)
        cin >> a[i], b[i] = a[i];
        
    init();
    
    int ans = 0;
    for(int i = 1; i <= n; i++)
    {
        f[i] = query(a[i] - 1) + 1; //求以(1~a[i]-1)为尾的LIS的最大长度
        ans = max(ans, f[i]);
        update(a[i], f[i]);
    }
    
    cout << ans;
}


http://www.kler.cn/a/531689.html

相关文章:

  • 深入解析 Redis AOF 机制:持久化原理、重写优化与 COW 影响
  • X Window System 架构概述
  • Kamailio 不通过 dmq 实现注册复制功能
  • 3.5.7 基于横盘结构的分析体系——缠论(背驰/背离)
  • Vue 3 30天精进之旅:Day 13 - 路由守卫
  • 六十分之三十七——一转眼、时光飞逝
  • [论文学习]Adaptively Perturbed Mirror Descent for Learning in Games
  • PyTorch生态系统中的连续深度学习:使用Torchdyn实现连续时间神经网络
  • FPGA|IP核PLL调用测试:建立工程
  • 【前端知识】常用CSS样式举例
  • Android开发工作经历整理
  • Vuex状态管理
  • 【漫话机器学习系列】078.如何选择隐藏单元激活函数(How To Choose Hidden Unit Activation Functions)
  • MySQL与Python交互-08
  • Java | CompletableFuture详解
  • 网站快速收录:如何优化网站音频内容?
  • bypass hcaptcha、hcaptcha逆向
  • 基于深度学习的视觉检测小项目(十七) 用户管理后台的编程
  • 如何确认Linux嵌入式系统的触摸屏对应的是哪个设备文件(/dev/input/event1)?如何查看系统中所有的输入设备?输入设备的设备文件有什么特点?
  • Linux进阶——例行性工作
  • PDFBox 替代方案(以及何时考虑更换)
  • 测试工程师的DS使用指南
  • 栈(5题)
  • 并行计算、分布式计算与云计算:概念剖析与对比研究(表格对比)
  • 【hot100】刷题记录(12)-回文链表
  • DeepSeek 核心技术全景解析