题意在一个整数序列中求出相邻元素相差不超过 m 的最长子序列。
易得到 dp 方程。 dp[i]= max{ dp[j]+ 1, 1<= j < i 且 d[i] 与 d[j] 相差不超过 m } 方程复杂度为 o(n^2) 。
用线段树对方程进行优化,先将数据离散化,使得数据范围变成 [1,n]。在上述方程求 dp[i] 的值时,对 i 前面的数遍历找出最优值相当于在区间 [ d[i]- m, d[i]+ m ] 内找出最优值,这个可以用线段树优化,使得复杂度达到 nlogn。
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
int const N= 102410;
int tb[N<<2];
int n, k, dat[N], sn[N];
int query( int x, int y, int L, int R, int rt ){
if( L== x && y== R ) return tb[rt];
int mid= (L+ R)>>1;
if( y<= mid ) return query( x, y, L, mid, rt<<1 );
else if( x> mid ) return query( x, y, mid+ 1, R, rt<<1|1 );
else{
int a= query( x, mid, L, mid, rt<<1 );
int b= query( mid+ 1, y, mid+ 1, R, rt<<1|1 );
return max(a,b);
}
}
void update( int x, int y, int L, int R, int rt ){
if( L== R ){
tb[rt]= max( tb[rt], y ); return; }
int mid= (L+ R)>> 1;
if( x<= mid ) update( x, y, L, mid, rt<<1 );
else update( x, y, mid+ 1, R, rt<<1|1 );
tb[rt]= max( tb[rt<<1], tb[rt<<1|1] );
}
int main(){
int test;
scanf("%d",&test );
while( test-- ){
scanf("%d%d",&n,&k );
for( int i= 1; i<= n; ++i ) scanf("%d", dat+ i );
copy( dat+ 1, dat+ 1+ n, sn+ 1 );
sort( sn+ 1, sn+ 1+ n );
fill( tb, tb+ (n<<2), 0 );
int ans= 0;
for( int i= 1; i<= n; ++i ){
int x= lower_bound( sn+ 1, sn+ 1+ n, dat[i]- k )- sn;
int y= upper_bound( sn+ 1, sn+ 1+ n, dat[i]+ k )- sn- 1;
int tmp= query( x, y, 1, n, 1 );
if( tmp+ 1> ans ) ans= tmp+ 1;
x= lower_bound( sn+ 1, sn+ 1+ n, dat[i] )- sn;
update( x, tmp+ 1, 1, n, 1 );
}
printf("%d\n", ans );
}
return 0;
}
分享到:
相关推荐
数字逻辑---交通灯系统设计(HUST) 1-12关 头歌 【一个代码可通12关】 1.7段数码管驱动电路设计 2.4位无符号比较器设计 3.8位无符号比较器设计 4.1位2路选择器设计 5.8位2路选择器设计 6.双向BCD计数器状态机设计 7....
"awesome-HUST-CS-CV-解密制度demo"是一个与计算机视觉(CV)相关的项目,源自华中科技大学(HUST)计算机科学系。这个项目的标题暗示它可能是一个演示或教程,用于展示如何在软件开发中应用解密技术,特别是在...
本实验"计组头歌实验:单总线CPU设计(定长指令周期3级时序)(HUST)1-6关"是华中科技大学(HUST)为学生提供的一种教学资源,旨在帮助他们深入理解CPU的工作机制。实验分为六个阶段,逐步引导学生完成一个简单的单总线...
【标题】"awesome-HUST-CS-CV-main (4).zip" 涉及的是一个与计算机科学相关的资源压缩包,特别是计算机视觉(CV)领域的资料集合。"HUST"通常代表华中科技大学,这可能是一个由该校学生或教师维护的项目。这个压缩包...
本资料集“HUST-IBM-java.rar”是华中科技大学IBM俱乐部精心制作的一份Java学习资源,旨在帮助初学者和有经验的开发者深入理解Java的核心概念和技术。 首先,我们来看这份资料的主要组成部分——“HUST-IBM-java....
logisim-hust-20200118.exe
《MIPS单周期CPU设计详解——基于HUST头歌实验》 在计算机科学领域,CPU(中央处理器)是计算机硬件系统的核心,它负责执行软件程序中的指令。MIPS(Microprocessor without Interlocked Pipeline Stages)是一种...
本资料集合了华中科技大学(HUST)2019年度的编译原理课程内容及其相关的实验任务,旨在帮助学习者全面了解和掌握编译器的设计与实现。 实验是理论学习的重要补充,通过实际操作,学生能够将抽象的理论知识转化为...
如果代码语法正确,则生成程序的语法树串联语法树输出。3.代码格式化该功能可以控制缩进从而将代码标准化代码的格式测试您可以使用以下测试样例# include < stdio>int _a;long b;char _d,_e;double c,h;int num[ 10 ...
Logisim-hust改良版是一款专为数字电路设计和计算机组织结构(计组)学习者打造的工具,它在原始的Logisim基础上进行了优化,加入了对中文的支持,并且无需安装Java环境即可运行,极大地提高了使用的便利性。...
该压缩包文件“HUST-CS-操作系统课程实验源码-内含源码和说明书(可自己修改).zip”是华中科技大学计算机科学系操作系统课程的一个实验项目资源集合。这个资源库包含了实现操作系统基本功能的源代码以及相关的实验...
elasticsearch
这个实验由HUST(华中科技大学)设计,旨在帮助学生深入理解CPU内部的工作原理,通过一系列关卡逐步构建完整的CPU模型。 首先,我们需要了解“头歌实验”的概念,这可能是一种教学方法或者实验平台的名称,用于提升...
一、资源详解 实验报告:通过实际操作与数据记录,让您深入理解计算机内部的工作原理。每份实验报告都详细记录了实验步骤、结果及分析,助您巩固知识点。 学习笔记:由资深学者精心整理的学习笔记,重点突出,为您...
有运算器设计的1-11关:复制代码,放进头歌,满分过 本实验使用 Verilog HDL 实现了单周期 54 条 MIPS 指令的 CPU 的设计、前仿真、后仿真和下板调试运行。CPU 可实现 54 条 MIPS 指令。 第1关:8位可控加减法电路...
HUST-AIA-Courses-Resource 这是一个收集华中科技大学(HUST)人工智能与自动化学院(AIA)课程资源的repo; 课程包括了HUST开设的公共必修课,部分公共选修课,以及学院开设的专业选修课程; 资料内容包括课程电子...
在计算机组织与结构(计组)的学习中,单总线CPU设计是一项重要的实践环节,它涉及到计算机硬件的基础知识,如CPU架构、总线系统、指令执行流程等。本实验以现代时序为背景,旨在帮助学生理解并掌握单总线结构的工作...
华中科技大学(HUST)的这个课程“运算器设计”可能涉及了从简单逻辑门到完整CPU结构的多个层次的教学内容。下面将对运算器设计的相关知识点进行详细解释。 1. **基本逻辑门**:运算器设计的基础是逻辑门,包括与门...
HUST-OS-实验 必须在2018年Spring进行操作系统实验。 更新:在此仓库中添加夏季任务。 环境 gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.9 in Windows Subsystem Linux) Thread model: posix 文件 ...