2022icpc亚洲区域赛(南京站)Problem D - 聊天程序

2022 i c p c 亚洲区域赛(南京站) P r o b l e m D − 聊天程序 \Huge{2022icpc亚洲区域赛(南京站)Problem D - 聊天程序} 2022icpc亚洲区域赛(南京站)ProblemD聊天程序

文章目录

  • 题意
  • 思路
  • 标程

题目链接:Problem - D - Codeforces

官方题解:D - 聊天程序 - SUA Wiki

题意

本题首先给出 n , k , m , c , d n,k,m,c,d n,k,m,c,d,然后给出 n n n个整数 a 1 , a 2 . . . a n a_1,a_2...a_n a1,a2...an

题目要求执行以下操作至少一次:

  • 选择一个长度恰好为 m m m的子数组 a a a,然后将长度也为 m m m的等差数组(首项为 c c c,公差为 d d d)依次加到对应的子数组 a a a上。

求至多一次操作之后,序列中第 k k k大的值最大可能是多少?

数据范围:

  • 1 ≤ k , m ≤ n ≤ 2 × 1 0 5 1\le k,m\le n \le 2\times 10^5 1k,mn2×105
  • 0 ≤ c , d ≤ 1 0 9 0\le c,d \le 10^9 0c,d109
  • 0 ≤ a i ≤ 1 0 9 0\le a_i\le 10^9 0ai109

思路

通过题意,我们可以发现题目要求的答案符合单调性,即如果答案 k k k符合要求,那么小于 k k k的数也必然符合要求(忽略能否构造出 k k k)。

因此,我们考虑使用二分答案。

那么,对于答案 k k k,当我们枚举小于 k k k的时候,check()函数必然是返回true,所以说使用二分答案最终枚举到的 k k k必定可以构造出。

但是,这道题目的难点就在于check()函数的判断,check()函数的时间复杂度必须保持在 O ( n ) O(n) O(n)的时间复杂度下可通过本题。

具体做法为:

  • 首先二分答案 m i d mid mid,将大于等于 m i d mid mid的数看成 1 1 1,小于 m i d mid mid的数看成 0 0 0。问题变为“判断能否通过至多一次操作,使序列中 1 1 1的数量大于等于 m i d mid mid”。
  • 接下来枚举操作位置,并计算进行操作后能否满足要求。考虑一个元素 a t ( a t < x ) a_t(a_t<x) at(at<x)容易发现,在操作范围从左往右移的过程中,当 a t a_t at第一次进入操作范围时,它会变成最大值,之后慢慢变小,最后又变回原来的值。因此每个数只会从 0 0 0变成 1 1 1 一次,再从 1 1 1变成 0 0 0一次。
  • 我们只要对每个元素找出这两次变化的位置,就能利用前缀和算出在每个位置进行操作对 1 1 1的数量的影响。

标程

#include<bits/stdc++.h>using namespace std;#define IOS ios::sync_with_stdio(false); cin.tie(nullptr), cout.tie(nullptr);
#define int long long 
#define ULL unsigned long long 
#define PII pair<int, int>
#define lowbit(x) (x & -x)
#define Mid ((l + r) >> 1)
#define ALL(x) x.begin(), x.end()
#define endl '\n'
#define fi first 
#define se secondconst int INF = 0x7fffffff;
const int Mod = 1e9 + 7;
const int N = 2e5 + 10; int n, k, m, c, d;
vector<int> a, f;bool check(int mid) {int cnt = 0;//记录不小于mid的个数for(int i = 1; i <= n; i ++ ) if(a[i] >= mid) cnt ++;if(cnt >= k) return true;//剪枝,个数符合直接范围truef.clear(); f.resize(n + 5);		//关键的f数组,用于记录前缀和for(int i = 1; i <= n; i ++ ) {if(a[i] >= mid) continue;    //只判断小于mid的数字int r = min(m - 1, i - 1);int mx = a[i] + c + d * r;  //当前数字最大能加多少if(mx < mid) continue;f[max(m, i)] ++;            //记录这个数字大于mid的区间的起点的坐标int mi = a[i] + c;          //当前数字最小能加多少if(mi >= mid) f[min(i + m, n + 1)] --;//若加最小也满足,则只有其不在区间m中时才去掉else {int t = mid - a[i] - c;int pos = (t + d - 1) / d - 1;f[min(n + 1, i + m - pos - 1)] --;}}for(int i = m; i <= n; i ++ ) {cnt += f[i];if(cnt >= k) return true;}return false;
}void Solved() { cin >> n >> k >> m >> c >> d;a.resize(n + 1);for(int i = 1; i <= n; i ++ ) {cin >> a[i];}int l = 0, r = 1e15, mid;//需要根据题目计算出答案可能的最大值while(l < r) {mid = l + r + 1 >> 1;if(check(mid)) l = mid;else r = mid - 1;}cout << l << endl;
}signed main(void) {IOSint ALL = 1; // cin >> ALL;while(ALL -- ) Solved();// cout << fixed;//强制以小数形式显示// cout << setprecision(n); //保留n位小数return 0;
}

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

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

相关文章

为什么使用数据库类型器件库

项目地址&#xff1a;https://github.com/boringhex-top/OpenECADLib Altium 数据库类型器件库&#xff08;DbLib&#xff09;具有显著的优势&#xff0c;特别是对于复杂设计和高效元件管理来说。这里详细介绍数据库类型器件库的优势以及相关背景知识&#xff0c;以帮助你更好…

Transformer详解(6)-解码器

Transformer解码器 import copy from torch import nn from norm import Norm from multi_head_attention import MultiHeadAttention from feed_forward import FeedForward from pos_encoder import PositionalEncoderdef get_clones(module, N):"""Create N…

汇编:循环结构

16位汇编语言中的循环结构主要通过条件跳转指令&#xff08;如LOOP、JMP, JE, JNE, JG, JL, 等&#xff09;来实现&#xff0c;常见的循环类型包括for循环和while循环&#xff1b; Loop指令 LOOP指令的操作非常简单&#xff1a;它将CX寄存器的值减1&#xff0c;如果结果不为零…

【C++】list的使用方法和模拟实现

❤️欢迎来到我的博客❤️ 前言 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向其前一个元素和后…

AI日报:百度发布文心大模型学习机;Open-Sora 1.1可生成21秒视频;Canva可以自动剪辑视频了;超牛ComfyUI节点AnyNode来了

欢迎来到【AI日报】栏目!这里是你每天探索人工智能世界的指南&#xff0c;每天我们为你呈现AI领域的热点内容&#xff0c;聚焦开发者&#xff0c;助你洞悉技术趋势、了解创新AI产品应用。 新鲜AI产品点击了解&#xff1a;AIbase - 智能匹配最适合您的AI产品和网站 1、百度文心…

网络、HTTP、HTTPS、Session、Cookie、UDP、TCP

OSI 七层模型 应用层、表示层、会话层、传输层、网络层、数据链路层、物理层 TCP/IP 五层模型 应用层&#xff1a;为用户的应用进程提供网络通信服务&#xff08;协议&#xff1a;域名系统DNS协议&#xff0c;HTTP协议&#xff0c;SMTP协议&#xff09;传输层&#xff1a;负…

leetcode 530.二叉搜索树的最小绝对差 、501.二叉搜索树中的众数 、236. 二叉树的最近公共祖先

leetcode 530.二叉搜索树的最小绝对差 、501.二叉搜索树中的众数 、236. 二叉树的最近公共祖先 leetcode 530.二叉搜索树的最小绝对差 题目链接&#xff1a;https://leetcode.cn/problems/maximum-binary-tree/description/ 题目&#xff1a; 给你一个二叉搜索树的根节点 r…

【MATLAB源码-第214期】基于matlab的遗传算法GA最短路径路由优化算法仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 在现代网络通信和路径规划领域&#xff0c;最短路径路由优化算法是一项关键技术。它涉及在给定的网络拓扑中寻找从源点到目标点的最短或成本最低的路径。近年来&#xff0c;遗传算法&#xff08;GA&#xff09;因其出色的全局…

跟进2年弄丢1.8亿,你的大客管理错在哪里?

数量并非目的之所在&#xff0c;质量才是根本之道。重视1%的超级用户&#xff0c;才是提高效率的关键所在。 ——凯文凯利 在当今的商业环境中&#xff0c;大客户已成为销售服务型企业最宝贵的资产。他们不仅贡献了企业收入的重要一环&#xff0c;…

Vue 项目中使用 Element UI库(Element UI 是一套基于 Vue.js 的桌面端组件库)

1. 安装 Element UI npm install element-plusnext 2.引入 Element UI&#xff08;在main.js中引入组件,注意要引入.css文件&#xff0c;图标也要单独引用&#xff09; import { createApp } from vueimport ElementPlus from element-plusimport element-plus/dist/index.css…

pinia持久化未生效

pinia官方文档 https://prazdevs.github.io/pinia-plugin-persistedstate/zh/guide/ pinia持久化未生效的原因很有可能就是在main.js中重复创建了pinia&#xff0c;导致持久化未生效

sql注入利用group_concat函数

1.group_concat函数的作用&#xff1a; 首先根据group by指定的列进行分组&#xff0c;将同一组的列显示出来&#xff0c;并且用分隔符分隔。 2.group_concat运用 这里我使用的是sqllab-less1&#xff0c;通过对数据库的查询&#xff0c;我们发现数据库表名&#xff0c;列名&a…

qmt量化交易策略小白学习笔记第1期【qmt如何获取股票概况?】

#获取股票概况 包含股票的上市时间、退市时间、代码、名称、是否是ST等。 #获取合约基础信息数据 该信息每交易日9点更新 调用方法 大蟒 from xtquant import xtdata xtdata.get_instrument_detail(stock_code) 参数 名称 类型 描述 stock_code string 合约代码 返…

手写电纸书天花板,阅读办公新体验 | 汉王手写电纸本 N10 2024 版使用评测

手写电纸书天花板&#xff0c;阅读办公新体验 | 汉王手写电纸本 N10 2024 版使用评测 请问如果说到电纸书&#xff0c;你的认知还只是Kindle吗&#xff1f;然而遗憾的是&#xff0c;Kindle亦是过去&#xff0c;智能才是未来。 哈喽小伙伴们好&#xff0c;我是Stark-C~&#x…

Mysql基础学习:mysql8 JSON字段查询操作

文章目录 一、查询JSON中某个属性值为XXX的数据量1、方式一2、方式二 二、查询的JSON中的value并去除双引号 一、查询JSON中某个属性值为XXX的数据量 1、方式一 select count(*)from table_namewhere JSON_CONTAINS(json-> $.filed1, "xxx")or JSON_CONTAINS(jso…

蓝桥杯嵌入式国赛笔记(4):多路AD采集

1、前言 蓝桥杯的国赛会遇到多路AD采集的情况&#xff0c;这时候之前的单路采集的方式就不可用了&#xff0c;下面介绍两种多路采集的方式。 以第13届国赛为例 2、方法一&#xff08;配置通道&#xff09; 2.1 使用CubeMx配置 设置IN13与IN17为Single-ended 在Parameter S…

Python—面向对象小解(2)

一、面向对象开发的基本使用 根据需求定义类 关键字class 属性 变量 方法 函数 默认函数中必须有个self参数 self(自己)代表当前对象 如何将一项物品放入一个空间内? # 类的定义创建 class itcast:# 指定属性name 大象container 冰箱# 指定数据的处理方法def open_c…

网络工程师:网络可靠性技术

一、可靠性 平均故障间隔时间MTBF(Mean Time Between Failure)和平均修复时间MTTR(Mean Time to Repair)这两个指标来评价系统的可靠性。 1、平均故障间隔时间MTBF MTBF是指一个系统无故障运行平均时间&#xff0c;通常以小时为单位。MTBF越大可靠性越高。 2、平均修复时间MTTR…

内网安全-隧道搭建穿透上线内网穿透-nps自定义上线内网渗透-Linux上线-cs上线Linux主机

目录 内网安全-隧道搭建&穿透上线内网穿透-nps-自定义-上线NPS工具介绍搭建过程 nps原理介绍MSF上线CS上线 内网渗透-Linux上线-cs上线Linux主机1.下载插件2.导入插件模块3.配置监听器4.服务端配置5.配置C2监听器并生成木马6.执行木马 内网安全-隧道搭建&穿透上线 内网…

2024年新算法-秘书鸟优化算法(SBOA)优化BP神经网络回归预测

2024年新算法-秘书鸟优化算法(SBOA)优化BP神经网络回归预测 亮点&#xff1a; 输出多个评价指标&#xff1a;R2&#xff0c;RMSE&#xff0c;MSE&#xff0c;MAPE和MAE 满足需求&#xff0c;分开运行和对比的都有对应的主函数&#xff1a;main_BP, main_SBOA, main_BPvsBP_SB…