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. 最多 ...
随机推荐
- python excel 07版本转换为03版本
需要安装pywin32模块 pip install pywin32 主程序: import win32com.client as win32 import os.path import glob cl ...
- cesium加载gif图片(cesium篇.43)
https://blog.csdn.net/QQ98281642/article/details/120214325
- Cesium Billboard加载Gif图片
https://blog.csdn.net/xietao20/article/details/109404491
- axios快速上手(简单使用)
axios对ajax请求进行了封装,并且使用promise的链式调用使得网络请求的代码逻辑更为清晰,同时支持async和await的编写方式使代码看起来像同步,更加方便于理解和阅读.axios这个库的 ...
- asp.net core之EfCore
EF Core(Entity Framework Core)是一个轻量级.跨平台的对象关系映射(ORM)框架,用于在.NET应用程序中访问和操作数据库.它是Entity Framework的下一代版本 ...
- centos转移mysql的数据存储目录
前言 centos7使用yum安装mysql的时候,没修改存储位置,/var也没单独挂载,导致长时间运行后根目录空间不足.现需要将数据转移到大分区的/home,操作步骤如下. 步骤 创建新目录 mkd ...
- AT_agc064_a题解
题面 题目大意 给定一个正整数 \(N\),要求构造一个序列.对于每一个在 \(1\) 到 \(N\) 之间的整数 \(i\),序列中包含了 \(i\) 个,并且将该序列首尾相接拼成环后,相邻两项之差 ...
- Vue用v-bind给标签属性赋值 src, href...
给属性渲染数据不能使用 {{name}} 标记, 请使用 v-bind:属性名称="name" name是json数据键值对中的键名, 请配合下面JS代码片食用 HTML < ...
- Go语言中JSON的反序列化规则
Unmarshal 解析 func Unmarshal(data []byte, v any) error Unmarshal 解析 JSON 编码的数据,并将结果存储在 v 指向的值中.如果 v 为 ...
- 5-MySQL列定义
1.列定义 说明:在MySQL中,列定义(Column Definition)是用于定义数据库表中每一列的结构的语句.它指定了列的名称.数据类型.长度.约束以及其他属性. 2.主键和自增 主键:PRI ...