hdu 5289 Assignment(ST表+双指针)

RK3568平台(USB篇)USB基础知识 现象:把USB设备比如Android手机接到PC答1:是USB控制器,是USB控制器内嵌的root hub.答2. windows里已经有了USB的总线驱动程序,接入USB设备后,是"总线驱动程序"知道你是"android phone"提示你安装的是"设备驱动程序"。USB总线驱动程序负责:识别USB设备, 给USB设备找到对应的驱动程序。答3. PC的USB口内部,D-和D+接有15K的下拉电阻,未接USB设备时为低电平USB设备的USB口内部,D-或D+接有1.5K的上拉电阻; 阅读详情

题意:

给一个整数序列,多达10万个。问:有多少个区间满足“区间最大元素与最小元素之差不超过k“

解析:

如果用穷举法,有O(n2)复杂度,这肯定是不可取的。
所以可以用ST算法先预处理每个区间最大和最小值,O(nlog(n))。
注意一个区间固定起点,延长终点,那么这个区间的最大值和最小值的差肯定是单调递增的。
所以这题用双指针的方法,枚举右指针rp,用左指针lp向前移动,求出满足rmq(lp,rp)<k,且lp和rp最大的区间,统计ans+=(rp−lp+1)。因为在[lp,rp]这个区间是满足要求的,那么以 rp 为结尾的,[lp,rp]、[lp+1,rp]…[rp−1,rp]、[rp,rp]就都是满足要求的,刚好(rp−lp+1)个。

my code

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef __int64 ll;
const int N = 100005;
int A[N];
int n, K;
int maxv[N*2][20], minv[N*2][20];
void rmq_init() {
    for(int i = 1; i <= n; i++) {
        maxv[i][0] = minv[i][0] = A[i];
    }
    for(int j = 1; (1<<j) <= n; j++) {
        for(int i = 1; i + (1<<j) - 1 <= n; i++) {
            maxv[i][j] = max(maxv[i][j-1], maxv[i + (1<<(j-1))][j-1]);
            minv[i][j] = min(minv[i][j-1], minv[i + (1<<(j-1))][j-1]);
        }
    }
}

int rmq(int L, int R) {
    int len = R - L + 1, k = 0;
    while(1 << (k+1) <= len) k++;
    int Max = max(maxv[L][k], maxv[R-(1<<k)+1][k]);
    int Min = min(minv[L][k], minv[R-(1<<k)+1][k]);
    return Max - Min;
}

int main() {
    int T;
    scanf("%d", &T);
    while(T--) {
        scanf("%d%d", &n, &K);
        for(int i = 1; i <= n; i++) {
            scanf("%d", &A[i]);
        }
        rmq_init();
        int lp = 1;
        ll ans = 0;
        for(int rp = 1; rp <= n; rp++) {
            while(rmq(lp, rp) >= K && lp < rp) lp++;
            ans += (rp - lp + 1);
        }
        printf("%I64d\n", ans);
    }
    return 0;
}
华为OD机试真题 新系统-等距二进制判断(C/C++/Py/Java/Js/Go) 华为OD机试 新系统真题【等距二进制判断】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【等距二进制判断】 阅读详情

相关推荐

SAP FICO 银企直联实战:从配置到异常处理的全流程解析

本文详细解析了SAP FICO银企直联的实战配置与异常处理全流程,涵盖银行主数据搭建、支付类配置、银行接口适配等关键步骤。通过实际案例分享,帮助用户掌握实时付款、余额监控和自动对账等核心功能,提升企业财务效率与安全性。特别针对常见问题如凭证重复付款、前置机UUID冲突等提供了实用解决方案。

weixin_29215815的博客 663

HDU5289:Assignment(二分 + ST表)

Assignment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 4288    Accepted Submission(s): 1971 Problem Description Tom owns a comp

junior19的博客 376

Homebrew高效升级与国内镜像源配置全攻略

本文详细介绍了如何通过配置国内镜像源(如清华、中科大、阿里云)来高效升级Homebrew,解决国内开发者访问GitHub仓库速度慢的问题。文章提供了从基础配置到永久生效的完整教程,包括常见问题解决和进阶技巧,帮助开发者大幅提升软件包管理效率。

weixin_28835551的博客 416

ACM个人模板总结

【代码】ACM个人模板总结。

qq_73575281的博客 608

基于APDL语言的结构优化设计

同理,二次微分值称为二阶值。通俗地讲优化分析,指的找到一种方案可以满足所有的设计要求,而且所需的支出(如重量,面积,体积,应力,费用等)最小。设计方案的任何方面都是可以优化的,比如说:尺寸(如厚度),形状(如过渡圆角的大小),支撑位置,制造费用,自然频率,材料特性等。完成分析文件的建立后,就可以进行优化分析了,如果在交互方式下进行优化的话,最好先在ANSYS数据库中用分析文件建立参数,其优点有:初始参数可以作为一阶分析方法的起点,且对于优化过程参数在数据库中可以在GUI下进行操作,便于定义优化变量。

m0_73816777的博客 1174

generate for与always内for:Verilog循环的静态生成与动态执行之辨

本文深入解析Verilog中generate for与always内部for循环的核心差异。generate for使用genvar变量在编译时静态生成硬件结构,适用于模块实例化;always内部for使用整型变量在运行时动态执行,综合为并行逻辑。理解这两种循环的适用场景和综合结果对提升数字电路设计质量至关重要。

yog99的博客 1086

[2016ACM多校] HDU5726 st表 离线

题意给n个数{a[i]},q个询问(l,r),与[l,r]最大公约数相同的区间有多少个。思路首先是查询最大公约数,然后统计相同的区间。查询可以用各种结构,既然只用查询那就用st简单高效,主要考虑统计。指定开头s,那么从s开始的区间,随着结尾t的减小,gcd减小,gcd种类不超过log(a[s])个,可以二分每种gcd结束的位置,然后累加。这样全统计时间复杂度为O(n*logn*logn),鉴于gcd

Burning1108的博客 596

用OpenPose进行单个或多个人体姿态估计

在计算机视觉中,人体姿态估计(关键点检测)是一个很常见的问题,在体育健身、动作采集、3D试衣、舆情监测等领域具有广阔的应用前景,本文要使用的检测方法就是基于OpenPose的人体姿态估计方法。 一、OpenPose简介 OpenPose人体姿态识别项目是美国卡耐基梅隆大学(CMU)基于卷积神经网络(CNN)和监督学习(SL)并以Caffe为框架开发的开源库。可以实现人体动作、面部表情、手指运动等姿...

weixin_42709563的博客 8404

hdu 5289 Assignment(数学)

题目链接:hdu 5289 Assignment #include #include #include using namespace std; const int maxn = 100000 + 5; const int maxm = 20; int N, K, A[maxn], dMax[maxn][maxm], dMin[maxn][maxm]; void RmqInit()

不慌不忙、不急不躁 897

巨量千川M-API实战:异步报表与批量操作自动化指南

API(应用程序编程接口)是现代软件系统间通信和数据交换的核心技术,它定义了服务间交互的协议和规范。在数字营销领域,营销API(Marketing API)通过程序化接口实现了广告账户管理、数据获取和操作自动化的能力,其技术价值在于将重复性人工操作转化为高效、准确的自动化流程,显著提升运营效率并降低人为错误。在广告投放精细化运营场景中,面对海量数据报表的获取与批量广告状态管理的需求,异步任务处理和批量操作接口成为关键技术解决方案。本文聚焦巨量千川M-API,深入解析其异步报表获取机制与批量操作实现,涵盖从任

weixin_32932149的博客 429

ESP32-C5硬件设计全链路指南:ADC/SDIO/USB/RF PCB实战

模数转换器(ADC)和高速外设接口是嵌入式系统硬件设计的核心基础。理解ADC通道映射、输入阻抗特性与抗干扰布线,是保障传感器采样精度的前提;掌握SDIO、USB差分信号的阻抗控制、端接策略与电源去耦方法,则直接决定通信可靠性与EMC性能。在Wi-Fi 6/Bluetooth 5.3双模SoC如ESP32-C5中,ADC复用约束、USB与SDIO管脚冲突、RF匹配网络调校、四层板叠层规划等工程细节,共同构成高成功率PCB落地的关键技术栈。本文聚焦ESP32-C5平台,系统梳理从模拟前端到射频输出的硬件设计规范

weixin_35756130的博客 345

hdu5289ST表+二分

#include #include #include #include #include #include #include #include #define mod 1000000007 using namespace std; int t,n,k; int a[100100],minn[100010][20],maxn[100010][20],mid; long long an

growing_up_的博客 300

本地快速部署谷歌开放模型Gemma教程(基于Ollama)

谷歌最近发布了新一代开源AI模型Gemma,此次发布的 Gemma 相比自家的 Gemini 更加轻量级,模型权重也一并开源。不仅可以在笔记本电脑上运行,而且还免费可商用,支持中文。运行速度飞快。

特立独行的博客 6716

HDU 5289 Assignment (ST算法区间最值+二分)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5289 题面: Assignment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 672    Accepted Su

David_Jett 1413

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

hdu5289 Assignment (区间查询最大值最小值,st算法...)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=5289 题意:给定长度为n的序列a和一个整数K,找出最大值和最小值的差值小于K的区间。输出满足条件的区间的个数。 分析:枚举a[i],以a[i]为起点,然后二分找终点(大区间满足条件的话小区间肯定也满足),根据起点和终点的位置可以算出以a[i]为起点可满足条件的区间的个数。怎么判断区间是否满足条件?可以

w20810的专栏 1095

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

HDU - 5289 Assignment

Assignment Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 5590 Accepted Submission(s): 2574 Problem Description Tom owns a company and he i...

青烟绕指柔的博客 539

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

[two-pointer ST表] HDU5289: Assignment

这种什么对于所有区间,最大值最小值的问题,我们一般考虑求控制区间,或者分治。 分治一般都可做,按套路搞就行了。但可能不是太方便。 这题就很简单了,就考虑对于一个固定的右端点,合法左端点的区间。 很显然最小左端点位置是单调的,直接ST表预处理出区间最值,two pointertwo\ pointer 扫一扫就好了。#include<cstdio> #include<cmath> #include

Lynstery's blog 394

HDU 5289 Assignment ST + 二分区间

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5289 题意: 求多少个区间[l,r] 有MAX[l,r] - MIN[l,r] < k 令F[l,r] = MAX[l,r] - MIN[l,r] 对于固定的左区间l,F[l,r]是一个非减序列,所以我们可以二分找到小于K的最右边界 ST预处理一边就可以在O(1)计算F

SolarDomo的博客 389

hdu5289 Assignment

Assignment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 2839    Accepted Submission(s): 1322 Problem Description Tom owns a comp

Dream_M 684

hdu 5289 Assignment 【ST算法】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5289 题意:求满足最大值减最小值小于k的区间的数目。 代码:#include <stdio.h> #include <ctime> #include <math.h> #include <limits.h> #include <complex> #include <string> #include

mfcheer 950

(ST+二分或贪心)hdu5289 Assignment

传送门: hdu5289 Problem Description Tom owns a company and he is the boss. There are n staffs which are numbered from 1 to n in this company, and every staff has a ability. Now, Tom is going to assign ...

239

RMQ+二分 hdu5289 Assignment

求有多少个区间,区间中的最大值减去最小值 首先初始化RMQ 枚举左端点,右端点可以在哪些位置呢? 对于如果R 那么必然有s'>=s,所以,在区间[L,n]中选出右端点R尽量靠右,任然有s 因为s具有单调性,所以而已用二分,求区间的极值可以用ST表,这题就可以过了 #include #include #include #include #include #include

qwb的博客 1155

HDU 5289 Assignment(二分+RMQ-ST)

Assignment Time Limit: 4000/2000 MS (Java/Others)Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 3813Accepted Submission(s): 1771 Problem Description Tom ow...

weixin_30258027的博客 120

hdu 5289 Assignment(RMQ,单调队列,multiset)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5289 解题思路: 解法1:枚举左端点,二分右端点,用st算法求区间最值 解法2:用单调队列维护最值 解法3:用multiset维护区间最值(这方法是队友在比赛中用的,我赛后重写了一遍。。。深刻体会了一下multiset的用法) AC代码: 解法1: #include #in

piaocoder 688

HDU 5289 Assignment rmq

Assignment 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5289 Description Tom owns a company and he is the boss. There are n staffs which are numbered from 1 to n in this company, and every staff ha...

weixin_30399821的博客 146

HDU5289 Assignment

题目大意:问数组a中,区间[i,j]中最大值和最小值之差不超过k,问这样的区间有多少个。 思路:预处理出区间[i,j]中的最大值最小值(这里用的是ST算法,也有用线段树的),然后枚举左端点l,二分出符合条件的右端点r,以l为左端点,j为右端点(l #define _CRT_SECURE_NO_DEPRECATE #include #include #include #include #incl

发神经的猫的专栏 1094
上一篇: SPOJ 375 Query on a tree (树链剖分+线段树)
下一篇: HDU 3966 Aragorn's Story(树链剖分+线段树区间更新+手动扩大内存)
HelloWorld10086
博客等级 码龄12年 88粉丝 614原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值