原题链接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\)

\[B_{z_i - 1 + n} = B_{z_i - 1} + n * x_i
\]
\[\begin{equation*}
\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的更多相关文章

  1. AtCoder Beginner Contest 137 F

    AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...

  2. 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}\). 题解:多算 ...

  3. 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 ...

  4. 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 的条件下 因此题目变成了,对于每个右端 ...

  5. AtCoder Beginner Contest 261 F // 树状数组

    题目链接:F - Sorting Color Balls (atcoder.jp) 题意: 有n个球,球有颜色和数字.对相邻的两球进行交换时,若颜色不同,需要花费1的代价.求将球排成数字不降的顺序,所 ...

  6. 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 ...

  7. AtCoder Beginner Contest 171-175 F

    171 F - Strivore 直接把初始字符当成隔板,统计的方案数会有重复 为了避免重复情况,规定隔板字母尽可能最后出现,即在隔板字母后面不能插入含隔板字母的字符串 所以在隔板字母后插入的字符只有 ...

  8. AtCoder Beginner Contest 213 F题 题解

    F - Common Prefixes 该题也是囤了好久的题目了,看题目公共前缀,再扫一眼题目,嗯求每个后缀与其他后缀的公共前缀的和,那不就是后缀数组吗?对于这类问题后缀数组可是相当在行的. 我们用后 ...

  9. AtCoder Beginner Contest 260 F - Find 4-cycle

    题目传送门:F - Find 4-cycle (atcoder.jp) 题意: 给定一个无向图,其包含了S.T两个独立点集(即S.T内部间的任意两点之间不存在边),再给出图中的M条边(S中的点与T中的 ...

  10. 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. 最多 ...

随机推荐

  1. 2021-7-7 VUE笔记2

    if实例 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <scri ...

  2. 关于python pycharm中输出的内容不全的解决办法

    import pandas as pd #设置显示的最大列.宽等参数,消除打印不完全中间的省略号 pd.set_option("display.width",1000) #加了这一 ...

  3. 渗透-02:HTTPS主干-分支和HTTPS传输过程

    一.HTTPS主干-分支 第一层 第一层,是主干的主干,加密通信就是双方都持有一个对称加密的秘钥,然后就可以安全通信了. 问题就是,无论这个最初的秘钥是由客户端传给服务端,还是服务端传给客户端,都是明 ...

  4. python教程 入门学习笔记 第2天 第一个python程序 代码规范 用默认的IDLE (Python GUI)编辑器编写

    四.第一个python程序 1.用默认的IDLE (Python GUI)编辑器编写 2.在新建文件中写代码,在初始窗口中编译运行 3.写完后保存为以.py扩展名的文件 4.按F5键执行,在初始窗口观 ...

  5. 如何将训练好的Python模型给JavaScript使用?

    前言 从前面的Tensorflow环境搭建到目标检测模型迁移学习,已经完成了一个简答的扑克牌检测器,不管是从图片还是视频都能从画面中识别出有扑克的目标,并标识出扑克点数.但是,我想在想让他放在浏览器上 ...

  6. phpexcel图片获取

    phpexcel图片获取常见的两种方式: require_once dirname(__FILE__) . '/../Jn/PHPExcel.php'; $filePath = "123.x ...

  7. 【pandas小技巧】--日期相关处理

    日期处理相关内容之前pandas基础系列中有一篇专门介绍过,本篇补充两个常用的技巧. 1. 多列合并为日期 当收集来的数据中,年月日等信息分散在多个列时,往往需要先合并成日期类型,然后才能做分析处理. ...

  8. Win11+ VS2022编译 FFmpeg6.0 静态库

    目录 编译前言 为什么项目编译? 前期准备 环境配置 ffmpeg外部库 额外的编译选项-for渲染 opengl (需要glext) ffnvcodec (需要nv-codec-headers) A ...

  9. 《小白WEB安全入门》03. 漏洞篇

    @ 目录 SQL注入和简单绕过原理 什么是SQL 什么是SQL注入 XSS漏洞原理 什么是XSS XSS分类 NOSQL注入 什么是NOSQL CSRF原理 什么是CSRF 网络摄像头入侵原理 什么是 ...

  10. 千万级数据的表,我把慢sql优化后性能提升30倍!

    分享技术,用心生活 背景:系统中有一个统计页面加载特别慢,前端设置的40s超时时间都加载不出来数据,因为是个统计页面,基本上一猜就知道是mysql的语句有问题,遗留了很久没有解决,正好趁不忙的时候,下 ...