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

【最长不下降子序列——树状数组、线段树、LIS】

题目

代码

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int a[N], b[N], tr[N];//a保存权值,b保存索引,tr保存f,g前缀属性最大值
int f[N], g[N];
int n, m;
bool cmp(int x, int y)
{if(a[x] != a[y]) return a[x] < a[y]; //不下降,因此值递增return x < y; //不下降,允许重复,保留等于号(不保留是x > y,代表逆序,自然不成序列)
}
void modify(int x, int val)
{for(; x <= n; 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 >> m;for(int i = 1; i <= n; i++)cin >> a[i], b[i] = i;sort(b+1, b+n+1, cmp);int ans = 0, tmp;for(int i = 1; i <= n; i++){int p = b[i];f[p] = query(p-1) + 1;tmp = 0;if(p + m <= n) tmp = m;ans = max(ans, f[p] + tmp);modify(p, f[p]);}memset(tr, 0, sizeof tr);for(int i = n; i >= 1; i--){int p = n + 1 - b[i];g[b[i]] = query(p-1) + 1;tmp = 0;if(b[i] - m >= 1) tmp = m;ans = max(ans, tmp + g[b[i]]);modify(p, g[b[i]]);}memset(tr, 0, sizeof tr);for(int i = 1; i <= n; i++){int p = b[i];if(p > m+1) ans = max(ans, query(p - m - 2) + m + g[p]);modify(p, f[p]);}cout << ans;
}

http://www.lryc.cn/news/530439.html

相关文章:

  • 【实战篇章】深入探讨:服务器如何响应前端请求及后端如何查看前端提交的数据
  • Games104——引擎工具链基础
  • 分层多维度应急管理系统的设计
  • 【漏斗图】——1
  • (二)QT——按钮小程序
  • 【Linux】从硬件到软件了解进程
  • HTB:Alert[WriteUP]
  • ARM嵌入式学习--第十天(UART)
  • 玉米苗和杂草识别分割数据集labelme格式1997张3类别
  • 哈夫曼树
  • wax到底是什么意思
  • 笔记:使用ST-LINK烧录STM32程序怎么样最方便?
  • 数据分析系列--[11] RapidMiner,K-Means聚类分析(含数据集)
  • Python在数据科学领域的深度应用:从数据处理到机器学习模型构建
  • 海外问卷调查渠道查,具体运营的秘密
  • 穷举vs暴搜vs深搜vs回溯vs剪枝系列一>单词搜索
  • 万字长文深入浅出负载均衡器
  • 基于SpringBoot的青年公寓服务平台的设计与实现(源码+SQL脚本+LW+部署讲解等)
  • 经典游戏红色警戒2之英语
  • IM 即时通讯系统-50-[特殊字符]cim(cross IM) 适用于开发者的分布式即时通讯系统
  • QtCreator在配置Compilers时,有一个叫ABI的选项,那么什么是ABI?
  • 处理 **5万字(约7.5万-10万token,中文1字≈1.5-2token)** 的上下文
  • 【狂热算法篇】探秘图论之Dijkstra 算法:穿越图的迷宫的最短路径力量(通俗易懂版)
  • springboot 启动原理
  • 浅析DDOS攻击及防御策略
  • Linux网络 HTTPS 协议原理
  • Idea插件开发
  • Java 有很多常用的库
  • pytorch实现文本摘要
  • C++基础day1