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. 最多 ...
随机推荐
- K8S | Service服务发现
服务发现与负载均衡. 一.背景 在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关.注册中心.配置中心等相关服务,可以被集群外部访问: 对于测试「Tes」环境或者 ...
- JDK中动态库加载路径问题,一文讲清
前言 本周协助测试同事对一套测试环境进行扩容,我们扩容很原始,就是新申请一台机器,直接把jdk.resin容器(一款servlet容器).容器中web应用所在的目录,全拷贝到新机器上,servlet容 ...
- nflsoj 1351 抓住奶牛
这题类似走迷宫,走迷宫是向四个方向进行拓展,而这道题好比是向三个方向拓展,分别是:\(x+1,x-1,x×2\) 在这里拓展的时候我写了一个函数 operation 来计算拓展后的坐标 这里判断坐标是 ...
- WPF如何构建MVVM+模块化的桌面应用
为何模块化 模块化是一种分治思想,不仅可以分离复杂的业务逻辑,还可以进行不同任务的分工.模块与模块之间相互独立,从而构建一种松耦合的应用程序,便于开发和维护. 开发技术 .Net 6 + WPF + ...
- SpringBoot 测试实践 - 3:@MockBean、@SpyBean 、提升测试运行速度、Testcontainer
编写测试的时候,我们必须保证外部依赖行为一致,也需要模拟一些边界条件,所以我们需要使用 Mock 来模拟对象的行为.SpringBoot 提供了 @MockBean 和 @SpyBean 注解,可以方 ...
- 细谈商品详情API接口设计
一.引言 随着互联网技术的发展,商品详情信息的展示和交互变得越来越重要.为了提供更好的用户体验,我们需要设计一套高效.稳定且易于扩展的商品详情API接口.本文将详细探讨商品详情API接口的设计,包括接 ...
- 如何通过抖音订单API接口获取订单详情
要通过抖音订单API接口获取订单详情,您需要进行以下步骤: 1.获取Access Token:使用APP ID和APP Secret调用获取Access Token API接口来获取您的Access ...
- Codeforces 1257D - Yet Another Monster Killing Problem
题意: 有\(n\)个怪物,每个怪物有攻击力\(a_i\)点:有\(m\)个英雄,每个英雄有攻击力\(p_i\)点,耐力\(s_{i}\)点. 怪物需要被依次杀死(按输入顺序). 每一天可以挑选一个英 ...
- 后浪搞的在线版 Windows 12「GitHub 热点速览」
本周比较火的莫过于 3 位初中生开源的 Windows 12 网页版,虽然项目完成度不如在线版的 Windows 11,但是不妨一看.除了后生可畏的 win12 之外,开源不到一周的 open-int ...
- Unity 性能优化之Shader分析处理函数ShaderUtil.HasProceduralInstancing: 深入解析与实用案例
Unity 性能优化之Shader分析处理函数ShaderUtil.HasProceduralInstancing: 深入解析与实用案例 点击封面跳转到Unity国际版下载页面 简介 在Unity中, ...