Codeforces 2009E Klees SUPER DUPER LARGE Array!!! 题解 [ 黄 ] [ 三分 ]

news/2025/2/25 0:55:20/文章来源:https://www.cnblogs.com/zhr0102/p/18735260

Klee's SUPER DUPER LARGE Array!!!:整数三分板子,以前一直都不会打,现在记录一下。

观察

推式子可知,\(S=|\cfrac{(2k+x-1)x-(2k+n-1+x)(n-x)}{2}|\)

观察可知他是个二次函数,然后还套了个绝对值,因为 \(1 \le x \le n\),所以他是单峰的,显然能够三分。

三分

先放板子。

凹函数

ll l=1,r=n,lmid,rmid,lans,rans;
while(l<r)
{lmid=l+(r-l)/3,rmid=r-(r-l)/3;lans=cal(lmid),rans=cal(rmid);if(lans<=rans)r=rmid-1;else l=lmid+1;
}
return l;

凸函数

ll l=1,r=n,lmid,rmid,lans,rans;
while(l<r)
{lmid=l+(r-l)/3,rmid=r-(r-l)/3;lans=cal(lmid),rans=cal(rmid);if(lans>=rans)r=rmid-1;else l=lmid+1;
}
return l;

细节

这里三分不用特判边界问题的原因是当区间长度小于等于 \(3\) 的时候它的 \(lmid\)\(rmid\) 都只会取到边界上,所以是一点一点地进行缩小范围的,所以不需要特判边界,最后的答案取 \(l\) 或者 \(r\) 都是可以的。这种写法 \(l\)\(r\) 的初始值是闭区间。

同时注意三分只能用于严格单峰的函数,不能存在一段函数使得这段函数值都相等,因为这样就无法判断单峰的位置了。但是如果这一段就是峰顶应该是可以的,因为三分默认把 \(lmid\)\(rmid\) 值相等的情况当成单峰在中间的情况处理。

所以这题就是个整数三分的板子了,直接处理即可,时间复杂度 \(O(t\log n)\)

代码

#include <bits/stdc++.h>
#define fi first
#define se second
#define eb(x) emplace_back(x)
#define pb(x) push_back(x)
#define lc(x) (tr[x].ls)
#define rc(x) (tr[x].rs)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ldb;
using pi=pair<int,int>;
ll n,k;
ll cal(ll x)
{return abs(((2*k+x-1)*x-(2*k+n-1+x)*(n-x))/2);
}
void solve()
{cin>>n>>k;ll l=1,r=n,lmid,rmid,lans,rans;while(l<r){lmid=l+(r-l)/3,rmid=r-(r-l)/3;lans=cal(lmid),rans=cal(rmid);if(lans<=rans)r=rmid-1;else l=lmid+1;}cout<<cal(l)<<'\n';
}
int main()
{//freopen("sample.in","r",stdin);//freopen("sample.out","w",stdout);ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t;cin>>t;while(t--)solve();return 0;
}

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

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

相关文章

解决Docker连接XQuartz报错

背景 打开XQuartz,在桌面右上角菜单栏中的XQuartz偏好设置中的安全性中启用 "允许从网络客户端连接",并重启XQuartz生效,后续操作中要保持XQuartz为打开状态,不要退出XQuartz报错内容: root@9b90039a4d17:~# ros2 run turtlesim turtlesim_node Authorization r…

MySQL的四种事务隔离级别

一.MySQL四大隔离级别 事务隔离级别 1.读未提交 (Read Uncommitted) 允许一个事务读取另一个事务未提交的数据。 2.读已提交 (Read Committed) 一个事务只能读取另一个事务已经提交的数据。 3.可重复读 (Repeatable Read) 保证在一个事务内多次读取同一数据时,其结果是一致的。…

持续分享干货!清华出品《DeepSeek如何赋能职场》PDF可下载

🔥今天分享的是清华出品《DeepSeek如何赋能职场》的PPT,内容涵盖了DeepSeek运行模式的讲解,如何向DeepSeek提问,如何构建提示词,结合实际多个实际应用场景,详细的介绍了DeepSeek结合其他多模态AI模型持续赋能职场的方法。提示词框架如何使用DeepSeek制作可视化图表如何使…

「跟着渡一学前端」并发请求实现

学习资源 并发请求 【渡一教育】 完整代码 function concurRequest(urls, maxNum) {if (urls.length === 0) {return Promise.resolve([]);}return new Promise((resolve) => {let nextIndex = 0;let finishCount = 0;const result = [];async function _request() {if (nex…

软工作业1

作业相关信息这个作业属于哪个课程 软件工程 这个作业要求在哪里 自我介绍+软工5问 这个作业的目标 自我介绍,了解软件工程基本概念个人介绍 Im YiLaiL YiLaiL/YiLaiL is a ✨ special ✨ repository because its README.md (this file) appears on your GitHub profile.🔭 …

EmEdit设置缓存目录临时文件夹

前言全局说明一、说明 1.1 环境: Windows 11 家庭版 23H2 22631.3737 EmEditor Professional (64-bit) Version 17.2.4二、打开大文本控制器三、点击右边大文本控制器上 自定义四、选择比较大的磁盘空间作为缓存空间免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他…

谈谈 ES 6.8 到 7.10 的功能变迁(3)- 查询方法篇

上一篇咱们了解了 ES 7.10 相较于 ES 6.8 新增的字段类型,这一篇我们继续了解新增的查询方法。 Interval 间隔查询: 功能介绍 Interval 查询,词项间距查询,可以根据匹配词项的顺序、间距和接近度对文档进行排名。主要解决的查询场景“创建一个多搜索词匹配的查询,同时保留…

【蓝牙小程序】在微信小程序中使用 ECharts

echarts-for-weixin 项目提供了一个小程序组件,用这种方式可以方便地使用 ECharts。 使用方式下载该项目 如有必要,将 ec-canvas 目录下的 echarts.js 替换为最新版的 ECharts。如果希望减小包体积大小,可以使用自定义构建生成并替换 echarts.js pages 目录下是使用的示例文…

Virtual Box设置双网卡

一、硬件 1.为虚拟机添加网卡2.配置网卡二、软件 3.获取mac地址 命令:ip link [root@vbox network-scripts]# ip link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000link/loopback 00:00:00:00:00:00 brd…

简单逆向Java程序

前置 来源 这个程序是我同学编写的一个学生分数管理系统,我将对这个已经编译的程序进行测试、逆向,找出其中的问题,并进行改进。 运行环境macOS 15.4 IntelliJ IDEA 2024.2.3 OpenJDK 23.0.2 TomCat 11.0.4 Safari 15.4运行结果主要问题 在使用了这个程序之后,我发现了以下…

信息论概述

1 信息与消息 1.1 信息 1.1.1 信息的定义 信息是信息论中最基本、最重要的概念 香农信息的定义:信息是事物运动状态或存在方式的不确定描述 1.1.2 (香农)信息的度量样本空间:对于我们需要描述的事物中,事物可能存在不同的状态,即事物展现出来的多种状态。那么为了便于形容事…

JUC并发—12.ThreadLocal源码分析

大纲 1.ThreadLocal的特点介绍 2.ThreadLocal的使用案例 3.ThreadLocal的内部结构 4.ThreadLocal的核心方法源码 5.ThreadLocalMap的核心方法源码 6.ThreadLocalMap的原理总结1.ThreadLocal的特点介绍 (1)ThreadLocal的注释说明 (2)ThreadLocal的常用方法 (3)ThreadLocal的使用…