CF6E Exposition题解

2023-05-16

前置知识

st 表:

用于求静态的区间最值问题
不会的同学可以看wsyear巨佬的这篇文章https://blog.csdn.net/wsyear/article/details/114334351?spm=1001.2014.3001.5501

正文

这道题其实很水,我觉得放绿题最多了

首先看到求最大值,就会想到二分,正好这里又是满足单调性的,所以我们二分长度

再看check函数,要使一段区间里差值不超过k,那么相当于最大的减去最小的小于等于k。而这个最值可以使用st表来维护

最后就枚举长度固定的区间就可以了

总体时间复杂度是 O ( n l o g n ) O(nlogn) O(nlogn)

代码如下


#include<bits/stdc++.h>
using namespace std;
const int N=1e5+1;
int n,k,mx[N][20],mn[N][20],a[N],ansl[N],ansr[N],anstot,tot;
int getmx(int l,int r){
  int tmp=log2(r-l+1);
  return max(mx[l][tmp],mx[r-(1<<tmp)+1][tmp]);
}
int getmn(int l,int r){
  int tmp=log2(r-l+1);
  return min(mn[l][tmp],mn[r-(1<<tmp)+1][tmp]);
}
bool check(int mid){
  tot=0;
  for(int i=1;i+mid-1<=n;i++){
    if(getmx(i,i+mid-1)-getmn(i,i+mid-1)<=k)ansl[++tot]=i,ansr[tot]=i+mid-1;
  }
  if(tot)anstot=tot;
  return tot;
}
int main(){
  cin>>n>>k;
  for(int i=1;i<=n;i++){
    cin>>a[i];
    mx[i][0]=mn[i][0]=a[i];
  }
  for(int j=1;j<20;j++){
    for(int i=1;i+(1<<j)-1<=n;i++){
      mx[i][j]=max(mx[i][j-1],mx[i+(1<<j-1)][j-1]);
      mn[i][j]=min(mn[i][j-1],mn[i+(1<<j-1)][j-1]);
    }
  }
  int l=1,r=n;
  while(l<r){
    int mid=l+r+1>>1;
    if(check(mid))l=mid;
    else r=mid-1;
  }
  check(l);
  cout<<l<<" "<<anstot<<'\n';
  for(int i=1;i<=anstot;i++)cout<<ansl[i]<<" "<<ansr[i]<<'\n';
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CF6E Exposition题解 的相关文章

随机推荐

  • android studio gradle 使用阿里源 (修改 settings.gradle)

    默认的地址下载速度极慢 依赖项几个小时也下载不完 改为 阿里源 1分钟就下载ok了 代码 修改根目录中 的 settings gradle 文件 内容 pluginManagement span class token punctuatio
  • 实用!Windows 远程控制 Ubuntu 系统

    点击上方 xff0c 选择 设为星标 优质文章 xff0c 及时送达 上一篇 xff1a 来源 xff1a 头条 互联网上的小蜘蛛 有时需要在实际的电脑上安装Ubuntu的操作系统来搭建免费的网站平台 这就需要使用远程的客户端Windows
  • 并查集——洛谷P3367

    题目描述 如题 xff0c 现在有一个并查集 xff0c 你需要完成合并和查询操作 输入输出格式 输入格式 xff1a 第一行包含两个整数N M xff0c 表示共有N个元素和M个操作 接下来M行 xff0c 每行包含三个整数Zi Xi Y
  • Web项目通过webservice编写一个接口,部署在远程服务器上

    在我的上一片文章中 xff0c 我在本地新建了一个普通的类来编写WebService xff0c 使用终端类 Endpoint 发布这个WebService xff0c 以此来实现让其他类调用这个接口 xff0c 实现接口中定义的功能 通过
  • ubuntu与win10共享LE蓝牙鼠标

    类似的教程网上有很多 xff0c 大部分是找到蓝牙设备目录下info文件中的 linkKey 中的key值复制到win10下注册表中 xff0c 但是对于蓝牙5 0或LE设备来说 xff0c 是没有linKey的 xff0c 这里我也参考了
  • FileZilla搭建FTP服务器图解教程,并允许外网访问NAT内网

    FTP是用来在两台计算机之间传输文件 xff0c 是Internet中应用非常广泛的服务之一 FTP服务是网络中经常采用的资源共享方式之一 FTP协议有PORT和PASV两种工作模式 xff0c 即主动模式和被动模式 今天我分享一个最近我自
  • 十进制转换八进制(C语言基础)

    题目描述编程 xff0c 输入一个 xff11 xff10 进制正整数 xff0c 然后输出它所对应的八进制数 输入无输出无样例输入10样例输出12 include lt stdio h gt int main int num m 61 0
  • 【Godot】对 Godot 节点设计的思考

    对 Godot 中节点设计的思考 单个节点的功能设计的想法 xff0c 体会 Godot 的设计思想 低耦合 设计单个节点可复用的节点时 xff0c 调用方法尽量只对当前节点可获取到的变量或方法进行使用 xff0c 比如我写一个可以控制 K
  • 【Godot】行为树(一)了解与设计行为树代码

    行为树介绍 行为树是个节点树 xff0c 父节点通过不断遍历子节点 xff0c 根据不同类型的节点执行不同的分支 最终调用叶节点执行功能 行为树也不难理解 xff0c 他就像代码逻辑一样 xff0c 只是用节点的方式展现出来 xff0c 而
  • 【Godot 4.0】一个简单的匿名方法的使用lambda

    Godot 4 0 beta3 Godot 4 0 中添加了 lambda 表达式 xff0c 匿名方法等很多方便的特性 xff0c 这里我写个用于扫描目录下所有文件的功能 可以看到代码非常简洁 span class token keywo
  • aur报错(错误:一个或多个文件没有通过有效性检查)

    当我们从aur里安装软件时 xff0c 有时会出现这种报错 xff08 如安装deepin wine wechat xff09 61 61 gt 错误 xff1a 一个或多个文件没有通过有效性检查 xff01 Error downloadi
  • Java使用不同方式获取两个集合List的交集、补集、并集(相加)、差集(相减)

    1 明确概念 首先知道几个单词的意思 xff1a 并集 61 union 交集 61 intersection 补集 61 complement 析取 61 disjunction 减去 61 subtract 1 1 并集 对于两个给定集
  • 【VTK】VTK框选表面拾取三角面片——通过观察者命令模式

    VTK框选拾取三角面片 最近需要实现拾取三角面片的交互功能 xff0c 看了官方示例和网友分享 xff0c 都是使用vtkInteractorStyleRubberBandPick搭配vtkAreaPicker 但是具体实现方法都是选择继承
  • 【VTK】VTK框选表面拾取面片——仅选中前表面

    VTK框选表面拾取面片 仅选中前表面 接上一篇 VTK框选表面拾取三角面片 通过观察者命令模式 上一篇最后遗留一个问题 xff0c 框选表面后 xff0c 会把模型背面的面片也一起选中 所以这篇内容是解决该问题的 效果预览 功能说明 通过鼠
  • GoDB开发踩坑记

    前言 前几天因为leancloud网速太慢所以自己写了一个go语言数据库 xff0c 想部署到我的树莓派上 正文 我在写的时候发现了一些神奇的操作 golang 把js变量的表达方式字符串转换成go变量 可以先把它嵌入到一个json字符串中
  • 通过Java反射获得对象里面的所有字段名以及字段对应的值

    首先我们有一个对象类 span class token keyword package span com span class token punctuation span xuzihui span class token punctuat
  • GoDB开发踩坑记(代码实现)

    前言 之前写了一篇GoDB开发踩坑记但是内容有些不全 xff0c 所以来补充一下 所以没看过GoDB开发踩坑记的可以先看一下那篇文章 正文 golang encode josn 把map string interface 转换为json字符
  • vim配置

    众所周知 xff0c vim是一个非常牛逼的文本编辑器 xff0c 但是他的界面很丑 xff0c 而且在终端下面也不能美化多少 但是 xff01 在windows下有一个叫做gvim的玩意儿 xff0c 在mac下有一个叫macvim的东东
  • 全网最简洁Archlinux 安装教程

    Archlinux 安装教程 先从mirrors ustc edu cn下载archlinux安装镜像 然后下载刻录工具etcher Windows版 xff1a Windows版 Linux版 xff1a Linux版 Mac版 xff1
  • CF6E Exposition题解

    前置知识 st 表 xff1a 用于求静态的区间最值问题 不会的同学可以看wsyear巨佬的这篇文章https blog csdn net wsyear article details 114334351 spm 61 1001 2014