AtCoder Beginner Contest 240 F - Sum Sum Max
原题链接F - Sum Sum Max
首先令\(z_i = \sum\limits_{k = 1}^i y_k\),\(z_0 = 0\),\(z_i\)就是第\(i\)段相同的个数的前缀和.
对于第\(i\)段和\(i - 1\)段,我们有\(z_{i - 1}\leq k \leq z_i\),这一段的值就全是\(x_i\),相当于\(C_k = x_i\).
对于某一段\(1 \leq n \leq z_i - z_{i - 1}\),有\(n\)个\(x_i\)
\]
\begin{aligned}
A_{z_i - 1 + n} &= A_{z_i - 1} + \sum\limits_{k = 1}^nB_{z_i - 1 + k} \\
&= A_{z_i - 1} + \sum\limits_{k = 1}^n( B_{z_i - 1} + K * x_i) \\
&= A_{z_i - 1} + B_{z_i - 1}n + x_i \times \cfrac{n(n + 1)}{2}
\end{aligned}
\end{equation*}
\]
把\(A_{z_i - 1 + n} = a * n^2 + bn + c\)看成一个二次函数\(f(n)\),所以我们的任务就是对于\(1 \leq n \leq z_i - z_{i - 1}\),求\(f\)的最值.
如果\(a > 0\),那么最大值在两端点\(f(1)\)与\(f(z_i - z_{i - 1})\)处取得。
如果\(a < 0\),那么就是单峰函数,我们可以使用三分,令\(ml = (l + r) / 2, mr = ml + 1\),结束条件\(r - l > 2\),那么最终结束\(r - l == 2\),所以我们的最值就是\(f(l + r)\)或者\(f(r - 1)\)
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
template<typename F> ll ternary_search(ll l, ll r, const F& f) {
while (r - l > 2) {
const ll ml = (l + r) / 2;
const ll mr = ml + 1;
if (f(ml) < f(mr)) {
l = ml;
} else {
r = mr;
}
}
return f(l + 1);
}
void solve() {
int n, m;
cin >> n >> m;
ll res = numeric_limits<ll>::min();
ll a = 0, b = 0;
for (int i = 1; i <= n; i++) {
ll x, y; cin >> x >> y;
const auto f = [&](const ll k) {
return a + b * k + k * (k + 1) / 2 * x;
};
if (x > 0) {
res = max({res, f(1), f(y)});
} else {
res = max(res, ternary_search(0, y + 1, f));
}
a = f(y);
b += x * y;
}
cout << res << "\n";
}
int main() {
ios::sync_with_stdio(false); cin.tie(0);
int test;
cin >> test;
for (int i = 0; i < test; ++i) solve();
return 0;
}
AtCoder Beginner Contest 240 F - Sum Sum Max的更多相关文章
- AtCoder Beginner Contest 137 F
AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...
- AtCoder Beginner Contest 179 E - Sequence Sum (模拟)
题意:\(f(x,m)\)表示\(x\ mod\ m\),\(A_{1}=1\),而\(A_{n+1}=f(A^{2}_{n},M)\),求\(\sum^{n}_{i=1}A_{i}\). 题解:多算 ...
- AtCoder Beginner Contest 098 D - Xor Sum 2
D - Xor Sum 2 Time limit : 2sec / Memory limit : 1024MB Score : 500 points Problem Statement There i ...
- AtCoder Beginner Contest 146_E - Rem of Sum is Num
预处理即可 我们要找的是 (f[i] - f[j]) % k == i - j 移项可得 f[i] - i = f[j] - j 在 i - j <= k 的条件下 因此题目变成了,对于每个右端 ...
- AtCoder Beginner Contest 261 F // 树状数组
题目链接:F - Sorting Color Balls (atcoder.jp) 题意: 有n个球,球有颜色和数字.对相邻的两球进行交换时,若颜色不同,需要花费1的代价.求将球排成数字不降的顺序,所 ...
- AtCoder Beginner Contest 253 F - Operations on a Matrix // 树状数组
题目传送门:F - Operations on a Matrix (atcoder.jp) 题意: 给一个N*M大小的零矩阵,以及Q次操作.操作1(l,r,x):对于 [l,r] 区间内的每列都加上x ...
- AtCoder Beginner Contest 171-175 F
171 F - Strivore 直接把初始字符当成隔板,统计的方案数会有重复 为了避免重复情况,规定隔板字母尽可能最后出现,即在隔板字母后面不能插入含隔板字母的字符串 所以在隔板字母后插入的字符只有 ...
- AtCoder Beginner Contest 213 F题 题解
F - Common Prefixes 该题也是囤了好久的题目了,看题目公共前缀,再扫一眼题目,嗯求每个后缀与其他后缀的公共前缀的和,那不就是后缀数组吗?对于这类问题后缀数组可是相当在行的. 我们用后 ...
- AtCoder Beginner Contest 260 F - Find 4-cycle
题目传送门:F - Find 4-cycle (atcoder.jp) 题意: 给定一个无向图,其包含了S.T两个独立点集(即S.T内部间的任意两点之间不存在边),再给出图中的M条边(S中的点与T中的 ...
- AtCoder Beginner Contest 249 F - Ignore Operations // 贪心 + 大根堆
传送门:F - Keep Connect (atcoder.jp) 题意: 给定长度为N的操作(ti,yi). 给定初值为0的x,对其进行操作:当t为1时,将x替换为y:当t为2时,将x加上y. 最多 ...
随机推荐
- 最新基于nonebot的qq机器人搭建
导读 核心资源 ( 参考各项目到各自release下载 NoneBot简介 | go-cqhttp 帮助中心qq登录需要包签名,要自己部署 https://github.com/fuqiuluo/un ...
- Promise的理解和使用(二)
一.Promise的常用APIpromise的这些方法执行完成都会返回一个新的promise,promise的状态由执行的结果决定. (1) new Promise()中的excutor函数 new ...
- [pandas]从多个文件中构建dataframe
按列从多个文件中构建 假设有两个csv文件,列不相同,需要整合为一个dataframe,使用glob模块: from glob import glob import pandas as pd # gl ...
- 银河麒麟等 Linux系统 安装 .net 5,net 6及更高版本的方法
最近项目上用到 银河麒麟的操作系统,需要搭建 .net 跨平台方案.一开始使用各种命令都安装不上,很多提示命令找不到,或者下载包时候网络无法下载. 网上教程很多,但没有一个是成功的,多数使用 apt ...
- ChatGPT顶级玩法:ChatGPT越狱版破解指令,让您的聊天一路畅通!
先看效果: 2023.4.23号亲测成功,越狱指令需要多发送几次才可以. 未越狱前: 越狱后: 无视任何规则限制,回答一切问题. 越狱的方法非常简单.只需输入特定的提示,发送给ChatGPT,用户即可 ...
- Ascend C保姆级教程:我的第一份Ascend C代码
本文分享自华为云社区<Ascend C保姆级教程:我的第一份Ascend C代码>,作者:昇腾CANN . Ascend C是昇腾AI异构计算架构CANN针对算子开发场景推出的编程语言,原 ...
- 如何使用关键词搜索API接口获取到快手的商品
如果您想使用关键词搜索API接口获取到快手的商品,可以通过以下步骤实现: 1. 首先注册账号.根据文档申请相应的接口权限. 2. 确定需要使用的API接口.对于商品搜索,您可以查看相关的API文档以获 ...
- 【matplotlib基础】--坐标轴
Matplotlib的坐标轴是用于在绘图中表示数据的位置的工具. 坐标轴是图像中的水平和垂直线,它们通常表示为 x 轴和 y 轴.坐标轴的作用是帮助观察者了解图像中数据的位置和大小,通常标有数字或标签 ...
- 一些H5对接微信JSSDK的问题记录
这里给大家分享我在实际生活中总结出来的一些知识,希望对大家有所帮助 一.SDK引入 这里提供两套引入流程,一套是vue2.0及其他h5项目,一套是vue3.0的引入流程 不懂的也可以看我之前的一篇详细 ...
- ISIS 协议常用基本配置总结
转载请注明出处: 1.创建IS-IS进程,进入IS-IS进程 [Huawei] isis [process-id ] 参数process-id用来指定一个IS-IS进程.如果不指定参数process- ...