当前位置: 首页 > news >正文

二分+模拟,CF1461D - Divide and Summarize

一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

Problem - 1461D - Codeforces


二、解题报告

1、思路分析

我们发现每次分裂操作结果都是固定的

我们从初始序列分裂出两个确定的子序列,两个确定的子序列又分裂出4个确定的子序列

那么也就是说我们最终能够分裂出的子序列的数目是O(n)的

我们预处理出所有的子序列就预处理出了所有可以得到的和(当然这个和要在分裂的过程中维护)

而分裂要求我们得到小于等于mid的部分和大于的部分

所以我们需要对原序列进行排序,模拟的过程通过二分来找到分裂的位置

同时预处理前缀和以便每次分裂前都记录一下当前得到的值

值得注意的是nums[l] = nums[r]的时候说明当前子序列是相同的,我们无法继续向下分裂

2、复杂度

时间复杂度: O(NlogN)空间复杂度:O(N)

3、代码详解

#include <bits/stdc++.h>
using PII = std::pair<int, int>;
using i64 = long long;
std::mt19937 rnd(std::chrono::steady_clock::now().time_since_epoch().count());const int P = [](int x) {auto isprime = [](int x) {if (x <= 1) return false;for (int i = 2; i <= x / i; i ++ )if (x % i == 0) return false;return true;};while (!isprime(x)) x ++;return x;
}(rnd() % 900000000 + 100000000);void solve() {/*  直接模拟    */int N, Q, s;std::cin >> N >> Q;std::vector<int> nums(N);std::vector<i64> pre(N + 1);for (int i = 0; i < N; i ++ ) std::cin >> nums[i];std::sort(nums.begin(), nums.end());for (int i = 0; i < N; i ++ ) pre[i + 1] += nums[i] + pre[i];std::vector<std::array<int, 2>> segs { { 0, N - 1 } };  segs.reserve(N);std::unordered_set<i64> st;while (segs.size()) {std::vector<std::array<int, 2>> nxt;for (auto& [l, r] : segs) {st.insert(pre[r + 1] - pre[l] + P);if (nums[l] != nums[r]) {int mid = std::upper_bound(nums.begin(), nums.end(), (nums[l] + nums[r]) >> 1) - nums.begin();nxt.insert(nxt.end(), { { l, mid - 1 }, { mid, r } });}}segs = std::move(nxt);}for (int i = 0, s; i < Q; i ++) {std::cin >> s;if (st.count(1LL * s + P))std::cout << "YES\n";elsestd::cout << "NO\n";}
}int main () {std::ios::sync_with_stdio(false);   std::cin.tie(0);  std::cout.tie(0);int _ = 1;std::cin >> _;while (_ --)solve();return 0;
}

相关文章:

二分+模拟,CF1461D - Divide and Summarize

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 Problem - 1461D - Codeforces 二、解题报告 1、思路分析 我们发现每次分裂操作结果都是固定的 我们从初始序列分裂出两个确定的子序列&#xff0c;两个确定的子序列又分裂出4个确定的子序列 那么也就是说…...

C#操作MySQL从入门到精通(16)——使用子查询

前言: 我们在查询数据的过程中有时候查询的数据不是从数据库中来的,而是从另一个查询的结果来的,这时候就需要使用子查询,本文使用的测试数据如下: 1、子查询 下面的代码就是先查询地址是安徽和广西的学生年龄,然后获取年龄对应的姓名 private void button__SubQuery…...

【vue实战项目】通用管理系统:图表功能

目录 前言 1.概述 2.数据概览页 2.1.柱状图 2.2.折线图 2.3.地图 前言 本文是博主前端Vue实战系列中的一篇文章&#xff0c;本系列将会带大家一起从0开始一步步完整的做完一个小项目&#xff0c;让你找到Vue实战的技巧和感觉。 专栏地址&#xff1a; https://blog.csd…...

第99天:权限提升-数据库提权口令获取MYSQLMSSQLOracleMSF

案例一&#xff1a;提权条件-数据库帐号密码获取方式 提权条件 - 数据库帐号密码获取方式 0 、网站存在高权限 SQL 注入点 1 、数据库的存储文件或备份文件 2 、网站应用源码中的数据库配置文件 3 、采用工具或脚本爆破 ( 需解决外联问题 ) sql注入点 xhcms后台管理系统…...

Java 环境配置 -- Java 语言的安装、配置、编译与运行

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 002 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…...

升级最新版openssh-9.7p1及openssl-1.1.1h详细步骤及常见问题总结

近期因为openssh相继被漏洞扫描工具扫出存在漏洞&#xff0c;所以考虑升级操作系统中的openssh和openssl为最新版本&#xff0c;来避免漏洞风险。期间的升级过程及遇到的疑难问题&#xff0c;特此记录下来&#xff0c;供有需要的人参考。 本次目标是升级 openssh 为 9.7p1 版本…...

学习使用 Frida 过程中出现的问题

一、adb shell命令报错&#xff1a;error: no devices found 目前该问题解决方法仅供参考&#xff0c;可先看看再选择试试&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 查看此电脑也会发现没有出现手机型号文件夹。 第一步&#xff1a; 检查一下手机开了u…...

Java实现简单词法、语法分析器

1、词法分析器实现 词法分析器是编译器中的一个关键组件&#xff0c;用于将源代码解析成词法单元。 词法分析器的结构与组件&#xff1a; 通常&#xff0c;词法分析器由两个主要组件构成&#xff1a;扫描器&#xff08;Scanner&#xff09;和记号流&#xff08;Token Stream&a…...

Python实现半双工的实时通信SSE(Server-Sent Events)

Python实现半双工的实时通信SSE&#xff08;Server-Sent Events&#xff09; 1 简介 实现实时通信一般有WebSocket、Socket.IO和SSE&#xff08;Server-Sent Events&#xff09;三种方法。WebSocket和Socket.IO是全双工的实时双向通信技术&#xff0c;适合用于聊天和会话等&a…...

python中的解包操作(*和**)

在Python中&#xff0c;* 和 ** 用于函数定义和函数调用时的参数解包和传递&#xff0c;它们有不同的用途和作用。以下是它们的详细解释和区别&#xff1a; 单星号 (*) 1. 位置参数解包&#xff08;函数调用&#xff09; 在函数调用时&#xff0c;* 用于将列表或元组解包成位…...

Lua 时间工具类

目录 一、前言 二、函数介绍 1.DayOfWeek 枚举定义 2.GetTimeUntilNextTarget 3.GetSpecificWeekdayTime 三、完整代码 四、总结 一、前言 当我们编写代码时&#xff0c;我们经常会遇到需要处理日期和时间的情况。为了更方便地处理这些需求&#xff0c;我们可以创建一个…...

Qt——Qt网络编程之TCP通信客户端的实现(使用QTcpSocket实现一个TCP客户端例程)

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》 《QT开发实战》 《Android开发实战》 《实用硬件方案设计》 《结构建模设…...

Qt信号槽与函数直接调用性能对比

1. 测试方法 定义一个类Recv&#xff0c;其中包含一个成员变量num和一个成员函数add()&#xff0c;add()实现num的递增。 另一个类Send通过信号槽或直接调用的方法调用Recv的add函数。 单独开一个线程Watcher&#xff0c;每秒计算num变量的增长数值&#xff0c;作为add函数被调…...

Python中的异常处理:try-except-finally详解与自定义异常类

Python中的异常处理&#xff1a;try-except-finally详解与自定义异常类 在Python编程中&#xff0c;异常处理是确保程序健壮性和可靠性的重要部分。当程序遇到无法预料的错误时&#xff0c;异常处理机制能够防止程序崩溃&#xff0c;并允许我们采取适当的措施来解决问题。本文…...

vscode软件上安装 Fitten Code插件及使用

一. 简介 前面几篇文章学习了 Pycharm开发工具上安装 Fitten Code插件&#xff0c;以及 Fitten Code插件的使用。 Fitten Code插件是是一款由非十大模型驱动的 AI 编程助手&#xff0c;它可以自动生成代码&#xff0c;提升开发效率&#xff0c;帮您调试 Bug&#xff0c;节省…...

人工智能小作业

1.问题 将下列句子用一阶谓词形式表示&#xff1a; (1)雪是白的。 (2)数a和数b之和大于数c。 (3)201班的学生每人都有一台笔记本电脑。 2.答案 句子&#xff08;1&#xff09;“雪是白的”可以表示为&#xff1a; White(雪)。 句子&#xff08;2&#xff09;“数a和数b…...

程序员搞副业一些会用到的工具

微信号采集(爬虫)技术的选型 那么&#xff0c;我们应该使用什么技术来从庞大的网页内容中自动筛选和提取微信号呢&#xff1f;答案就是&#xff1a;数据采集技术&#xff0c;也就是爬虫技术。 然而&#xff0c;数据采集技术种类繁多&#xff0c;我们具体应该采用哪一个呢&…...

k8s更改master节点IP

背景 搭建集群的同事未规划网络&#xff0c;导致其中有一台master ip是192.168.7.173&#xff0c;和其他集群节点的IP192.168.0.x或192.168.1.x相隔太远&#xff0c;现在需要对网络做整改&#xff0c;方便管理配置诸如绑定限速等操作。 master节点是3节点的。此博客属于事后记…...

c++【入门】已知一个圆的半径,求解该圆的面积和周长?

限制 时间限制 : 1 秒 内存限制 : 128 MB 已知一个圆的半径&#xff0c;求解该圆的面积和周长 输入 输入只有一行&#xff0c;只有1个整数。 输出 输出只有两行&#xff0c;一行面积&#xff0c;一行周长。&#xff08;保留两位小数&#xff09;。 令pi3.1415926 样例…...

c#通过sqlsugar查询信息并日期排序

c#通过sqlsugar查询信息并日期字段排序 public static List<Sugar_Get_Info_Class> Get_xml_lot_xx(string lot_number){DBContext<Sugar_Get_Info_Class> db_data DBContext<Sugar_Get_Info_Class>.OpDB();Expression<Func<Sugar_Get_Info_Class, b…...

R方小于0?别慌!手把手教你诊断线性回归模型的5个常见问题

R方小于0&#xff1f;别慌&#xff01;手把手教你诊断线性回归模型的5个常见问题 第一次看到R方&#xff08;R-squared&#xff09;出现负值时&#xff0c;很多数据分析师都会心头一紧。这个理论上应该在0到1之间波动的指标&#xff0c;怎么会突破下限&#xff1f;本文将带你深…...

STM32景区智能服务系统设计与实现

基于STM32的景区智能服务系统设计与实现1. 项目概述1.1 系统背景现代旅游业快速发展对景区服务水平提出了更高要求&#xff0c;传统服务模式在信息化和智能化方面存在明显不足。游客常面临寻找洗手间困难、不了解停车场空位情况、无法获取实时环境信息等问题。为解决这些痛点&a…...

别再只盯着H∞了!用MATLAB的musyn命令搞定µ综合,为你的不确定系统设计鲁棒控制器

用MATLAB的musyn命令实现综合&#xff1a;工程师的不确定系统鲁棒控制实战指南 在无人机飞控系统调试现场&#xff0c;工程师小王盯着屏幕上剧烈震荡的响应曲线皱起了眉头——明明在实验室仿真中表现完美的H∞控制器&#xff0c;在实际飞行测试中却频频出现不稳定现象。这种场景…...

PDF-Parser-1.0开箱即用体验:无需配置的PDF解析工具

PDF-Parser-1.0开箱即用体验&#xff1a;无需配置的PDF解析工具 1. 引言&#xff1a;PDF解析的痛点与解决方案 如果你经常需要从PDF文档里提取文字、表格或者公式&#xff0c;肯定遇到过这样的烦恼&#xff1a;要么工具太复杂&#xff0c;配置起来让人头疼&#xff1b;要么效…...

Langflow全场景部署实战指南:从本地开发到云端服务

Langflow全场景部署实战指南&#xff1a;从本地开发到云端服务 【免费下载链接】langflow ⛓️ Langflow 是 LangChain 的用户界面&#xff0c;使用 react-flow 设计&#xff0c;旨在提供一种轻松实验和原型设计流程的方式。 项目地址: https://gitcode.com/GitHub_Trending/…...

Legado阅读器内置Web服务器技术深度解析:NanoHTTPD在Android嵌入式环境中的架构设计与性能优化

Legado阅读器内置Web服务器技术深度解析&#xff1a;NanoHTTPD在Android嵌入式环境中的架构设计与性能优化 【免费下载链接】legado Legado 3.0 Book Reader with powerful controls & full functions❤️阅读3.0, 阅读是一款可以自定义来源阅读网络内容的工具&#xff0c;…...

别再傻傻分不清了!5分钟搞懂差分信号、共模与差模干扰的本质区别

差分信号与干扰类型&#xff1a;从原理到实战的深度解析 刚接触电路设计时&#xff0c;我也曾被各种"模"搞得晕头转向——差分信号是不是自带抗干扰光环&#xff1f;共模电感能不能随便往电路里塞&#xff1f;为什么同样的滤波器用在某组信号上效果显著&#xff0c;换…...

如何让鼠标光标焕发新生?Bibata的个性化设计革命

如何让鼠标光标焕发新生&#xff1f;Bibata的个性化设计革命 【免费下载链接】Bibata_Cursor Open source, compact, and material designed cursor set. 项目地址: https://gitcode.com/gh_mirrors/bi/Bibata_Cursor 在数字化生活中&#xff0c;鼠标光标是我们与电脑交…...

MySQL 事务锁等待问题定位方案

MySQL事务锁等待问题定位方案 在高并发数据库场景中&#xff0c;事务锁等待是导致性能下降甚至系统卡顿的常见问题。当多个事务同时竞争同一资源时&#xff0c;可能因锁冲突导致事务长时间阻塞&#xff0c;进而影响业务响应。如何快速定位并解决这类问题&#xff1f;本文将介绍…...

ZeroTier内网穿透的3种高阶玩法:旁路由模式竟比主路由更稳定?

ZeroTier旁路由架构的三大高阶应用场景&#xff1a;性能优化与实战解析 1. 旁路由架构的技术原理与优势对比 在传统网络架构中&#xff0c;主路由承担着NAT转换、流量转发、防火墙等核心功能&#xff0c;而旁路由&#xff08;又称辅助路由&#xff09;则通过并行部署的方式&…...