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.hqwc.cn/news/454593.html

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

相关文章

操作系统笔记之内存映射

操作系统笔记之内存映射 —— 杭州 2024-02-04 code review! 文章目录 操作系统笔记之内存映射一.内存映射概念1. 文件映射到内存 (Memory-Mapped Files)2. 虚拟内存管理 (Virtual Memory Management)3. 内存映射I/O (Memory-Mapped I/O)4. 图形处理 (Graphics Processing)5.…

网站为什么要用CND?

CDN对于网站来说至关重要&#xff0c;CDN对网站的重要性主要体现在可以提升用户体验、提高网站安全性、减轻服务器负担、提高SEO排名等&#xff0c;还可以为网站节省带宽成本。因此&#xff0c;选择一个性能好、速度快的CDN是很有必要的。 CDN对于现代网站来说是不可或缺的&am…

MySQL数据库练习【一】

MySQL数据库练习【一】 一、建库建表-数据准备二、习题2.1. 查询部门编号为30的部门的员工详细信息2.2.查询从事clerk工作的员工的编号、姓名以及其部门号2.3.查询奖金多于基本工资的员工的信息、查询奖金小于基本工资的员工的信息2.4.查询奖金多于基本工资60%的员工的信息2.5.…

libev-ev_timer定时器的理解

1.相关说明 本文主要自己对于libev的ev_timer定时器的代码流程梳理&#xff0c;主要有ev_timer结构体定义变量的初始化&#xff0c;定时器变量的参数设置&#xff0c;定时器变量的使用 2.相关代码流程 下面是图片 3.相关实现代码 main.c #include <stdio.h> #include…

红队打靶练习:HEALTHCARE: 1

目录 信息收集 1、arp 2、nmap 3、nikto 4、whatweb 目录探测 1、gobuster 2、dirsearch WEB web信息收集 gobuster cms sqlmap 爆库 爆表 爆列 爆字段 FTP 提权 信息收集 本地提权 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Inte…

【前端web入门第四天】02 CSS三大特性+背景图

文章目录: 1. CSS三大特性 1.1继承性 1.2 层叠性 1.3 优先级 1.3.1 优先级1.3.2 优先级-叠加计算规则 2. 背景图 2.1 背景属性2.2 背景图2.3 背景图的平铺方式2.4 背景图位置2.5 背景图缩放2.6 背景图固定2.7 背景复合属性 1. CSS三大特性 1.1继承性 什么是继承性? 子级默…

点大商城V2版 2.5.5全插件开源独立版 百度+支付宝+QQ+头条+小程序端+unipp开源端安装测试教程

点大商城V2是一款采用全新界面设计支持多端覆盖的小程序应用&#xff0c;支持H5、微信公众号、微信小程序、头条小程序、支付宝小程序、百度小程序&#xff0c;本程序是点大商城V2独立版&#xff0c;包含全部插件&#xff0c;代码全开源&#xff0c;并且有VUE全端代码。分销&am…

Python学习路线 - Python高阶技巧 - PySpark案例实战

Python学习路线 - Python高阶技巧 - PySpark案例实战 前言介绍Spark是什么Python On SparkPySparkWhy PySpark 基础准备PySpark库的安装构建PySpark执行环境入口对象PySpark的编程模型 数据输入RDD对象Python数据容器转RDD对象读取文件转RDD对象 数据计算map方法flatMap方法red…

【Linux多线程】线程池

目录 线程池的概念 线程池的优点 线程池的应用场景 线程池示例 代码实现 线程池的概念 线程池是一种线程使用模式。线程过多会带来调度开销&#xff0c;进而影响缓存局部性和整体性能。而线程池维护着多个线程&#xff0c;等待着监督管理者分配可并发执行的任务。 线程…

机器学习---半监督学习简单示例(标签传播算法)

1. 使用半监督学习方法 Label Spreading 在一个生成的二维数据集上进行标签传播 import numpy as np import matplotlib.pyplot as plt from sklearn.semi_supervised import label_propagation from sklearn.datasets import make_circles# generate ring with inner box n_s…

北斗卫星在物联网时代的应用探索

北斗卫星在物联网时代的应用探索 在当今数字化时代&#xff0c;物联网的应用已经深入到人们的生活中的方方面面&#xff0c;让我们的生活更加智能便捷。而北斗卫星系统作为我国自主研发的卫星导航系统&#xff0c;正为物联网的发展提供了强有力的支撑和保障。本文将全面介绍北…

前端复杂 table 渲染及 excel.js 导出

转载请注明出处&#xff0c;点击此处 查看更多精彩内容 现在我们有一个如图&#xff08;甚至更复杂&#xff09;的表格需要展示到页面上&#xff0c;并提供下载为 excel 文件的功能。 前端表格渲染我们一般会使用 element-ui 等组件库提供的 table 组件&#xff0c;这些组件一般…