Codeforces Round 914 (Div. 2)(D1/D2)--ST表

在这里插入图片描述

Codeforces Round 914 (Div. 2)(D1/D2)–ST表

D1. Set To Max (Easy Version)

题意:

给出长度为n的数组a和b,可以对a进行任意次数操作,操作方式为选择任意区间将区间内值全部变成该区间的最大值,
是否有可能使得数组a等于数组b。

思路:

D1允许On^2的时间复杂度,所以可以直接暴力:

  • 遍历ab数组,若出现ai>bi,直接NO,不可能修改数更小;
  • 否则的话就向该元素两边分别遍历,直到找到符合条件的a元素;
  • 注意,当出现遍历a元素大于所需b元素或遍历b元素小于所需b元素时结束查找,因为会造成ai>bi的情况;

AC code:

void solve() {cin >> n;for (int i = 1; i <= n; i ++) cin >> a[i];for (int i = 1; i <= n; i ++) cin >> b[i];for (int i = 1; i <= n; i ++) {if (a[i] == b[i]) continue;if (a[i] > b[i]) {cout << "NO" << endl;return;}int l = i, r = i;for (int j = i - 1; j >= 1; j --) {if (a[j] > b[i] || b[j] < b[i]) {break;}if (a[j] == b[i]) {l = j;break;}}for (int j = i + 1; j <= n; j ++) {if (a[j] > b[i] || b[j] < b[i]) {break;}if (a[j] == b[i]) {r = j;break;}}if (a[l] != b[i] && a[r] != b[i]) {cout << "NO" << endl;return;}} cout << "YES" << endl;
}

D2. Set To Max (Hard Version)

题意:同上
思路:

D2需要O1的查询,则需要用到ST表:

思路与D1相似,在查找过程中,不需要去遍历查询符合条件的元素,通过ST表来进行快速查询区间符合条件的元素;

AC code:

int find(int l, int r) {int k = g[r - l + 1] / g[2];return max(st[l][k], st[r - (1 << k) + 1][k]);
}void solve() {cin >> n;for (int i = 1; i <= n; i ++) cin >> a[i];for (int i = 1; i <= n; i ++) cin >> b[i];if (n == 1) {if (a[0] == b[0]) cout << "YES" << endl;else cout << "NO" << endl;return;} g[1] = 0;for (int i = 2; i <= n; i ++) g[i] = g[i / 2] + 1;for (int j = 0; j < 18; j ++) for (int i = 1; i <= n; i ++) if (j == 0) st[i][j] = a[i];else st[i][j] = max(st[i][j - 1], st[i + (1 << j - 1)][j - 1]);int pos = 1;for (int i = 1; i <= n; i ++) {if (a[i] > b[i]) {cout << "NO" << endl;return;}while (pos <= n && (a[pos] < b[i] || (pos < i && find(pos, i) > b[i]))) pos ++;if (pos > n || (pos >= i && find(i, pos) > b[i])) {cout << "NO" << endl;return;}} cout << "YES" << endl;
}

RMQ算法/ST表–快速查询区间最值

本质上为动态规划,先预处理倍增关系,再进行快速查询

时间复杂度上,预处理为Onlogn,查询为O1
缺点:不能修改

预处理:

st(i, j) :从i开始,长度为 2 j 2^j 2j的区间中的最大值

st(i, j) = max(st(i, j - 1), st(i + 2^(j - 1), j - 1))

查询:
找到最大的小于等于(r - l + 1)的 2 k 2^k 2k的k值,取两段综合最大即为区间最大
即:max(st(l, k), st(r - 2 k 2^k 2k + 1, k));

以下为求取任意区间最大值st表

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;const int N = 2e5+10, M = 18;int n, m;
int a[N], st[N][M], g[N];void init() { //预处理for (int j = 0; j < M; j ++) for (int i = 1; i + (1 << j) - 1 <= n; i ++) if (j == 0) st[i][j] = a[i];else st[i][j] = max(st[i][j - 1], st[i + (1 << j - 1)][j - 1]);
}int find(int l, int r) { //查询int len = r - l + 1;int k = log(len) / log(2);return max(st[l][k], st[r - (1 << k) + 1][k]);
}void llg() { //预处理logg[1] = 0;for (int i = 2; i <= n; i ++) g[i] = g[i / 2] + 1;
}int main() {cin >> n;for (int i = 1; i <= n; i ++) cin >> a[i];init();cin >> m;while (m --) {int l, r; cin >> l >> r;cout << find(l, r) << endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/669174.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# CAD界面-自定义窗体(三)

运行环境 vs2022 c# cad2016 调试成功 一、引用 二、开发代码进行详细的说明 初始化与获取AutoCAD核心对象&#xff1a; Database db HostApplicationServices.WorkingDatabase;&#xff1a;这行代码获取当前工作中的AutoCAD数据库对象。在AutoCAD中&#xff0c;所有图形数…

《短链接--阿丹》--技术选型与架构分析

整个短链接专栏会持续更新。有兴趣的可以关注一下我的这个专栏。 《短链接--搭建解析》--立项+需求分析文档-CSDN博客 阿丹: 其实整套项目中的重点,根据上面的简单需求分析来看,整体的项目难题有两点。 1、快速的批量生成短链,并找到对应的存储。 并且要保持唯一性质。…

【Linux驱动】块设备驱动(二)—— 块设备读写(使用请求队列)

块设备的操作函数并没有类似于字符驱动中的read 和write函数&#xff0c;要实现读写操作&#xff0c;只能在请求处理函数中实现。这就分为两种&#xff0c;是否要使用请求队列&#xff0c;请求队列的主要作用是管理和调度IO请求。在以下情况中&#xff0c;一般需要用到请求队队…

跑路页面HTML源码

简单的HTMLJSCSS&#xff0c;记事本修改内容&#xff0c;喜欢的朋友可以下载 https://download.csdn.net/download/huayula/88811984

vivado RTL综合中的多线程

RTL综合中的多线程 在多处理器系统上&#xff0c;RTL合成默认情况下利用多个CPU核心&#xff08;最多四个&#xff09;来加快编译时间。同时运行的线程的最大数量会有所不同&#xff0c;具体取决于处理器的数量可在系统、操作系统和流程阶段使用&#xff08;请参阅Vivado Desi…

HTTP1.1、HTTP2、HTTP3

HTTP1.1 HTTP/1.1 相比 HTTP/1.0 性能上的改进&#xff1a; 使用长连接的方式改善了 HTTP/1.0 短连接造成的性能开销。支持管道&#xff08;pipeline&#xff09;网络传输&#xff0c;只要第一个请求发出去了&#xff0c;不必等其回来&#xff0c;就可以发第二个请求出去&…

在VM虚拟机上搭建MariaDB数据库服务器

例题&#xff1a;搭建MariaDB数据库服务器&#xff0c;并实现主主复制。 1.在二台服务器中分别MariaDB安装。 2.在二台服务器中分别配置my.cnf文件&#xff0c;开启log_bin。 3.在二台服务器中分别创建专用于数据库同步的用户replication_user&#xff0c;并授权SLAVE。&#x…

Matplotlib绘制炫酷柱状图的艺术与技巧【第60篇—python:Matplotlib绘制柱状图】

文章目录 Matplotlib绘制炫酷柱状图的艺术与技巧1. 簇状柱状图2. 堆积柱状图3. 横向柱状图4. 百分比柱状图5. 3D柱状图6. 堆积横向柱状图7. 多系列百分比柱状图8. 3D堆积柱状图9. 带有误差线的柱状图10. 分组百分比柱状图11. 水平堆积柱状图12. 多面板柱状图13. 自定义颜色和样…

c#string方法对比

字符串的截取匹配操作在开发中非常常见&#xff0c;比如下面这个示例&#xff1a;我要匹配查找出来字符串数组中以“abc”开头的字符串并打印&#xff0c;我下面分别用了两种方式实现&#xff0c;代码如下&#xff1a; using System; namespace ConsoleApp23{ class Progra…

aidl复杂流程封装

1 aidl相关困扰点 1 制作步骤复杂&#xff0c;先定义然后编译&#xff0c;然后复制&#xff0c;两边都要一一对应 2 增加回调&#xff0c;自定义对象流程更加麻烦&#xff0c;还要处理对象数据流是 in 还是out。 3 一方异常怎么办&#xff0c;虽然服务端可以用 RemoteCallbackL…

Retrofit源码分析及理解

参考文档&#xff1a; 12W字&#xff1b;2022最新Android11位大厂面试专题&#xff08;一&#xff09; - 掘金 Retrofit 版本号&#xff1a;2.9.0 Retrofit简单来说&#xff0c;就是对OkHttp上层进行了封装&#xff0c;已达到用户方便使用管理网络请求的目的。 Retrofit内部有…

力扣热门100题刷题笔记 - 10. 正则表达式匹配

力扣热门100题 - 10. 正则表达式匹配 题目链接&#xff1a;10. 正则表达式匹配 题目描述&#xff1a; 给你一个字符串 s 和一个字符规律 p&#xff0c;请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符 * 匹配零个或多个前面的那一个元素 所谓匹配&#xff…

asqlcell,一个超强的 Python 库!

前言 大家好&#xff0c;今天为大家分享一个超强的 Python 库 - asqlcell。 Github地址&#xff1a;https://github.com/datarho/asqlcell Python asqlcell 是一个用于执行异步数据库操作的开源库&#xff0c;它允许开发者通过异步的方式与数据库进行交互&#xff0c;提高了数…

如何使用VS Code编写小游戏并实现公网游玩本地游戏【内网穿透】

文章目录 前言1. 编写MENJA小游戏2. 安装cpolar内网穿透3. 配置MENJA小游戏公网访问地址4. 实现公网访问MENJA小游戏5. 固定MENJA小游戏公网地址 前言 本篇教程&#xff0c;我们将通过VS Code实现远程开发MENJA小游戏&#xff0c;并通过cpolar内网穿透发布到公网&#xff0c;分…

七月论文审稿GPT第2.5版:微调GPT3.5 turbo 16K和llama2 13B以扩大对GPT4的优势

前言 自去年7月份我带队成立大模型项目团队以来&#xff0c;我司至今已有5个项目组&#xff0c;其中 第一个项目组的AIGC模特生成系统已经上线在七月官网第二项目组的论文审稿GPT则将在今年3 4月份对外上线发布第三项目组的RAG知识库问答第1版则在春节之前已就绪至于第四、第…

ai平滑工具的使用方法

ai中想要使用平滑工具来处理线条&#xff0c;该怎么是哦用哪个恩&#xff1f;下面我们就来看看详细的教程。 1、我们通过一个例子演示平滑工具的使用&#xff0c;先新建文件&#xff0c;在左侧工具箱中找到平滑工具。 文章源自四五设计网-https://www.45te.com/39726.html 2、…

CSS:三列布局

三列布局是指左右两列定宽&#xff0c;中间自适应。最终效果如下&#xff1a; HTML&#xff1a; <div class"container"><div class"left"></div><div class"center"></div><div class"right">…

001集:open语句打开文件及文件类型(二进制、文本文件)详解——vba

open用法可以用来打开文件、文件夹或网页&#xff0c;也可以用来运行某一应用程序、文件或网页。一般来说&#xff0c;只要在开始菜单中可以找到某个应用程序&#xff0c;我们就可以使用open命令打开该应用程序;另外&#xff0c;在打开某个文件或网页时&#xff0c;也可以使用o…

设计模式学习笔记05(小滴课堂)

讲解Adapeter设计模式和应用场景 接口的适配器案例实战 代码&#xff1a; 定义一个接口&#xff1a; 编写适配器&#xff1a; 写我们的商品类&#xff1a; 会员类&#xff1a; 这样我们不同的需求可以根据需要去实现不同的接口方法&#xff0c;而不用实现全部接口方法。 适配…

Qt案例 在对QGraphicsView视图修改和撤销修改图元操作时,使用命令模式实现。

当项目中有QGraphicsView视图直接修改图元的功能时&#xff0c;常会有CtriZ和CtrlY这种执行与撤销图元修改的功能&#xff0c;以便于在修改图元后能够进行一个还原/执行操作&#xff0c;此时就适合使用命令模式设计来实现这个功能。 以下示例在WINDOWS系统&#xff0c;Qt Creat…