hdu4521 线段树+dp

202205南海区小学甲组1~3题试题+答案 作者自己的答案,谢绝参考 第1题 商品库存 时限:1s 空间:256m 小明在统计某样商品的库存量时遇到了困难,他看到了n行的记录,每行两个数。他记得较大的数表示这种商品的进货量,较小的数表示出货量,请帮助他尽快计算现在的库存是多少。 输入格式 第一行,一个整数n,表示n天的记录。(n≤100000) 接下来n行,每行两个整数s,t(0≤s,t≤1000000),其中一个是该商品的进货量,另一个是出货量。 输出格式 输出一个整数,表示现在的库存... 阅读详情

小明系列问题——小明序列

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 2620    Accepted Submission(s): 807


Problem Description
  大家都知道小明最喜欢研究跟序列有关的问题了,可是也就因为这样,小明几乎已经玩遍各种序列问题了。可怜的小明苦苦地在各大网站上寻找着新的序列问题,可是找来找去都是自己早已研究过的序列。小明想既然找不到,那就自己来发明一个新的序列问题吧!小明想啊想,终于想出了一个新的序列问题,他欣喜若狂,因为是自己想出来的,于是将其新序列问题命名为“小明序列”。

  提起小明序列,他给出的定义是这样的:
  ①首先定义S为一个有序序列,S={ A1 , A2 , A3 , ... , An },n为元素个数 ;
  ②然后定义Sub为S中取出的一个子序列,Sub={ Ai1 , Ai2 , Ai3 , ... , Aim },m为元素个数 ;
  ③其中Sub满足 Ai1 < Ai2 < Ai3 < ... < Aij-1 < Aij < Aij+1 < ... < Aim ;
  ④同时Sub满足对于任意相连的两个Aij-1与Aij都有 ij - ij-1 > d (1 < j <= m, d为给定的整数);
  ⑤显然满足这样的Sub子序列会有许许多多,而在取出的这些子序列Sub中,元素个数最多的称为“小明序列”(即m最大的一个Sub子序列)。
  例如:序列S={2,1,3,4} ,其中d=1;
  可得“小明序列”的m=2。即Sub={2,3}或者{2,4}或者{1,4}都是“小明序列”。

  当小明发明了“小明序列”那一刻,情绪非常激动,以至于头脑凌乱,于是他想请你来帮他算算在给定的S序列以及整数d的情况下,“小明序列”中的元素需要多少个呢?
 

Input
  输入数据多组,处理到文件结束;
  输入的第一行为两个正整数 n 和 d;(1<=n<=10^5 , 0<=d<=10^5)
  输入的第二行为n个整数A1 , A2 , A3 , ... , An,表示S序列的n个元素。(0<=Ai<=10^5)
 

Output
  请对每组数据输出“小明序列”中的元素需要多少个,每组测试数据输出一行。
 

Sample Input
2 0 1 2 5 1 3 4 5 1 2 5 2 3 4 5 1 2
 

Sample Output
2 2 1

/*
hdu4521 线段树+dp
隔k个数的最长上升子序列
用线段树来维护到第最大值小于等于i时的子序列长度,然后则是注意添加的时候
每次i-k>0进行插入,到了下个for循环则刚好是添加到第i-k-1个。
hhh-2016-02-29 19:13:32
*/
#include <algorithm>
#include <cmath>
#include <queue>
#include <iostream>
#include <cstring>
using namespace std;

const int maxn = 100020;

struct node
{
    int l,r;
    int len;
} tree[maxn*100];
int tans[maxn];
int a[maxn];
void push_up(int r)
{
    int lson = r<<1;
    int rson = r<<1|1;
    tree[r].len = max(tree[lson].len,tree[rson].len);
}

void build(int i,int l,int r)
{
    tree[i].l = l;
    tree[i].r = r;
    tree[i].len = 0;
    if(l == r)
        return;
    int mid = (l+r)>>1;
    build(i<<1,l,mid);
    build(i<<1|1,mid+1,r);
    push_up(i);
}

void update(int i,int k,int c)
{
    if(tree[i].l == k && tree[i].r == k)
    {
        tree[i].len = c;
        return ;
    }
    int mid = (tree[i].l+tree[i].r)>>1;
    if(k <= mid)update(i<<1,k,c);
    else update(i<<1|1,k,c);
    push_up(i);
}

int query(int i,int l,int r)
{
    if(tree[i].l >= l && tree[i].r <= r)
        return tree[i].len;
    int mid = (tree[i].l+tree[i].r)>>1;
    int ans = 0;
    if(l <= mid)
        ans = max(ans,query(i<<1,l,r));
    if(r > mid)
        ans = max(ans,query(i<<1|1,l,r));
    return ans ;
}

int main()
{
    int n,k,x;
    while(scanf("%d%d",&n,&k) != EOF)
    {
        int ans = 0;
        build(1,0,maxn);
        for(int i =1; i <= n; i++)
        {
            scanf("%d",&a[i]);
            if(a[i]>0)
                tans[i] = query(1,0,a[i]-1)+1;
            else
                tans[i] = 1;
            ans = max(ans,tans[i]);
            if(i-k>0)
                update(1,a[i-k],tans[i-k]);
        }
        cout << ans <<endl;
    }
    return 0;
}




AI赋能软件测试:从冒烟测试到全流程智能化的效率革命 软件测试是确保软件质量的关键环节,其核心原理是通过预设用例验证系统功能是否符合预期。传统测试方法依赖人工编写和维护脚本,面临维护成本高、适应性差等挑战。随着人工智能技术的发展,特别是自然语言处理和计算机视觉的成熟,AI为测试领域带来了新的技术价值。通过让AI理解应用界面和业务逻辑,可以实现测试用例的智能生成、自主执行和结果分析,显著提升测试效率和覆盖率。在实际应用场景中,AI驱动的冒烟测试能够动态适应UI变化,自动分析失败日志,将测试人员从重复劳动中解放出来,专注于更复杂的质量策略设计。本文基于AI在冒烟测 阅读详情

相关推荐

最全中文停用词表(可直接复制)

最全的停用此表整理 词表名 词表文件 中文停用词表 cn_stopwords.txt 哈工大停用词表 hit_stopwords.txt 百度停用词表 baidu_stopwords.txt 机器智能实验室停用词库 scu_stopwords.txt 以上停用词表链接:https://github.com/goto456/stopwords 以下是我常用的1893个停用词,可直接复制 ! " # $ % & ' ( ) * + , - -- . .. ... ....

dilifish的博客 12万+

NYOJ - 擅长排列的小明 II

擅长排列的小明 II 时间限制:1000 ms  |           内存限制:65535 KB 难度:3 描述 小明十分聪明,而且十分擅长排列计算。 有一天小明心血来潮想考考你,他给了你一个正整数n,序列1,2,3,4,5......n满足以下情况的排列: 1、第一个数必须是1 2、相邻两个数之差不大于2 你的任务是给出排列的种数。 输入多组数据。每组数据中输

SevenMIT的专栏 1535

从零开始:用这些公开数据集搞定电力AI项目(含鸟巢、绝缘子、负荷预测等33个实战资源)

本文系统梳理了电力AI领域33个精选公开数据集,涵盖目标检测、负荷预测等关键场景,如鸟巢检测、绝缘子缺陷识别等。通过实战案例解析数据预处理、模型选型及性能优化策略,帮助工程师快速构建端到端解决方案,解决电力AI项目中的数据获取与处理难题。

weixin_42522552的博客 216

HDU4521:小明系列问题——小明序列(LIS加强版)

Problem Description   大家都知道小明最喜欢研究跟序列有关的问题了,可是也就因为这样,小明几乎已经玩遍各种序列问题了。可怜的小明苦苦地在各大网站上寻找着新的序列问题,可是找来找去都是自己早已研究过的序列。小明想既然找不到,那就自己来发明一个新的序列问题吧!小明想啊想,终于想出了一个新的序列问题,他欣喜若狂,因为是自己想出来的,于是将其新序列问题命名为“小明序列”。   

ACM!荣耀之路! 3266

【科普知识】什么是驱控一体化伺服电机?

驱控一体化伺服电机以其高度的集成性、兼容性、便捷性以及卓越的性能表现,成为了现代工业自动化领域的一颗璀璨明珠。对于那些追求高效、精准、智能控制的行业用户而言,它无疑是一种理想的选择。

m0_46512607的博客 3151

告别爆显存!手把手教你为ComfyUI+华为Atlas 300I Duo配置wan2.1视频生成工作流(含CPU-VAE参数)

本文详细介绍了华为Atlas 300I Duo与ComfyUI的深度适配实战,重点优化wan2.1视频生成工作流。从硬件散热改造到软件栈配置,再到ComfyUI专项优化,提供完整的解决方案,显著提升视频生成效率与稳定性,特别适合需要高效文生视频的应用场景。

weixin_26812607的博客 461

【题解&&海亮集训】 数字(上升)序列

题目传送门 题目描述: 对于一个给定的S={a1,a2,a3,…,an},若有P={ax1,ax2,ax3,…,axm},满足(x1 &lt; x2 &lt; … &lt; xm)且( ax1 &lt; ax2 &lt; … &lt; axm)。那么就称P为S的一个上升序列。 如果有多个P满足条件,那么我们想求字典序最小的那个。 任务给出S序列,给出若干询问。 对于第i个询问,求出长度为Li的上升...

鹭天 460

Brim与ZUI协同安装指南:从下载到流量分析实战

本文提供Brim与ZUI协同安装与实战指南,详细讲解从下载、环境变量配置到流量分析的全流程。通过将PCAP文件转换为ZNG格式,结合直观的Zed查询语言,这套组合能极大提升大型网络数据包的分析效率,是网络安全与运维人员进行高效流量分析的利器。

metal的博客 458

上升序列问题

直接通过某一列就得出“要么为严格上升序列,要么不是严格上升序列”的结论。所以,只有在循环外,当整个循环都没有判断为真的情况时,才能确定这是一个严格上升序列。就为假,但它绝不是严格上升序列,因为你才刚刚看了前两个数,后面的数很有可能存在。)记录上一个输入的数值,将这两个数值进行比较即可。语句为真,立即可以判断该序列不是严格上升序列;刚好就是一对相邻的数,我们对它们使用。为假,能立即判断它就是严格上升序列吗?来说,它之前的数值已经赋值给了。个数才对,因此,我们需要在将。个数之前,先把它的值赋值给。

neo_liukun的专栏 726

微信聊天记录丢失原因与恢复方案详解

SQLite数据库作为移动应用常见的本地存储方案,其加密机制和存储结构直接影响数据安全性。以微信为例,聊天记录存储在EnMicroMsg.db等SQLite文件中,采用AES加密保护。当手机清理工具误删这些文件时,会导致特定时间段记录丢失。理解数据恢复原理需要掌握文件系统删除机制和闪存特性,其中关键点包括TRIM指令的影响和数据块覆盖风险。通过专业工具如DiskDigger或iMyFone D-Back,配合ADB调试和SQLite数据重组技术,可在黄金时间窗口内恢复记录。日常维护建议结合自动化备份方案和存

weixin_32612263的博客 386

csp信奥赛C++标准模板库STL案例应用1

csp信奥赛C++标准模板库STL案例应用1

王老师青少年编程 1382

hdu 4521 小明系列问题——小明序列(线段树 or DP)

  题目链接:hdu 4521   本是 dp 的变形,却能用线段树,感觉好强大。   由于 n 有 10^5,用普通的 dp,算法时间复杂度为 O(n2),肯定会超时。所以用线段树进行优化。线段树维护的是区间内包含某点的最大满足条件的长度,叶子节点以该元素结尾,最长长度。至于相邻两项隔 d 个位置,求 dp[i] 时,我们只把 dp[i - d - 1] 更新至线段树中,然后在这颗...

aidiao7379的博客 172

踩坑2周总结:Python+YOLO26搭建工业级多路视频分析应用,从单路卡顿到16路4K稳跑30FPS

本文分享了工业级多路视频分析系统的实战经验,针对智慧物流园区的车辆违停和人员安全监测需求,提出了一套完整的解决方案。作者通过踩坑实践,总结出多路视频分析的四大核心痛点:视频流解码瓶颈、推理调度混乱、内存占用爆炸和部署兼容性差。 文章详细介绍了技术选型方案,推荐使用FFmpeg+PyAV进行硬件加速解码、YOLO26+TensorRT INT8量化推理、单进程多线程的生产者-消费者架构,以及内存池复用等技术组合。该方案在RTX 4070 Ti上实现了16路4K视频30FPS稳定运行,GPU利用率达85%以上,

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 955

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【HDU4521】 dp思想+线段树操作

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4521 题目大意:有n个数,求间距大于d的最长递增子序列。 解题思路:扎眼一看,不是简单的dp嘛,再眨眼一看,n最大为10^5,蛋碎一地呀。 这题不仅要线段树功底好,还要有比较强的dp思想,从第d+1个位置开始更新,每个节点的sum值保存的是从第1个数到...

baidui8622的博客 139

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

HDU 4521 间隔》=1的LIS 线段树+dp

题意: n个数 d个距离 下面n个数的序列,求序列中的最长单调递增子序列,保证子序列的每个元素相距要>d (普通的LIS d=0 )   #include #include #include #include #include #define N  101000 #define ll int #define LL(x) (x<<1) #define RR(x) (

九野的博客 2303

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

hdu 4521 线段树+DP

题意:求给定序列中间隔至少为d个 d

江上白衣凌云 502

hdu 4521(线段树优化dp)

小明系列问题——小明序列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Problem Description   大家都知道小明最喜欢研究跟序列有关的问题了,可是也就因为这样,小明几乎已经玩遍各种序列问题了。可怜的小明苦苦地在各大网站上寻找着新的序列问题,可

hexianhao的博客 290

hdu4521 小明序列 (线段树 + DP)

题意:题目的意思很简单,给定一个序列,求最大递增子序列的长度,同时相邻俩项下标的差值必须大于d 分析:就题意而已,只是在最长递增子序列的加了一个限制条件,沿用最长递增子序列的思路,则dp[i] = max(dp[i], dp[j] + 1), (i - j > d && a[i] > a[j]) 从状态转移方程可以看出,问题的关键在于维护区间(0,i - d - 1...

weixin_30372371的博客 807

hdu 4521(dp+线段树)

题意:求长度为n的序列中,间隔至少为d的最长上升子序列的长度。 题解:因为n取值到1e5,到每个元素之前的最长上升子序列用线段树维护,区间内的值是在当前区间内最长上升子序列的最大长度,区间范围是给出的序列中的值确定的,f[i]存从0到a[i]的范围内的最长上升子序列的最大长度,因为间隔要大于等于d,所以第i个元素进行线段树更新节点后,f数组只更新到i-d。#include <cstdio> #in

俯瞰风景 725

【HDU】4521 小明系列问题——小明序列 线段树+DP

小明系列问题——小明序列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 1632    Accepted Submission(s): 485 Problem Description   大家都知道小明最喜欢研究

poursoul 824

hdu4521(线段树+dp)

传送门:小明系列问题——小明序列 题意:有n个数,求间距大于d的最长上升序列。 分析:dp[i]表示在i点以a[i]结束距离大于d的最长上升序列,然后每更新到第i点时,取i-d之前小于a[i]的数为结束的最长上升序列进行状态转移,并维护前i-d之前的最大上升序列,维护i-d之前的每点为结束的最长上升序列用线段树维护即可。 #pragma comment(linker,"/STA...

weixin_33814685的博客 99
上一篇: hdu3340 线段树+多边形
下一篇: hdu4605 树状数组+离散化+dfs
Tyuio28
博客等级 码龄11年 12粉丝 279原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值