CF2019 F. Max Plus Min Plus Size

news/2024/10/3 2:23:30

ddp题解,就是 \(f[pos][o][l][r]\) 表示线段树上pos位置的区间是否选出最大值,以及左右端点有没有被去到时的最大值。然后用线段树维护依次取某个值为最小值的时候dp的最优解。

const int N = 2e5 + 5;
int T, n, a[N], f[N << 2][2][2][2];
inline int getmax(int pos) { return max(max(f[pos][1][0][0], f[pos][1][1][0]), max(f[pos][1][1][1], f[pos][1][0][1])); }
inline void update(int pos, int idx) {for (int i = 0; i < 2; i++)for (int j = 0; j < 2; j++)for (int k = 0; k < 2; k++) f[pos][i][j][k] = -1e9;f[pos][0][0][0] = 0;if (a[idx] < 0) return;f[pos][0][1][1] = 1;f[pos][1][1][1] = a[idx] + 1;
}inline void pushup(int pos) {for (int i = 0; i < 2; i++)for (int j = 0; j < 2; j++)for (int k = 0; k < 2; k++) f[pos][i][j][k] = -1e9;for (int a = 0; a < 2; a++)for (int b = 0; a + b < 2; b++)for (int i = 0; i < 2; i++)for (int j = 0; j < 2; j++)for (int x = 0; x + j < 2; x++)for (int y = 0; y < 2; y++)chkmax(f[pos][a + b][i][y], f[pos << 1][a][i][j] + f[pos << 1 | 1][b][x][y]);
}inline void build(int pos, int l, int r) {if (l == r) { update(pos, l); return; }int mid = l + r >> 1;build(pos << 1, l, mid);build(pos << 1 | 1, mid + 1, r);pushup(pos);
}inline void modify(int pos, int l, int r, int x) {if (l == r) { update(pos, l); return; }int mid = l + r >> 1;if (x <= mid) modify(pos << 1, l, mid, x);else modify(pos << 1 | 1, mid + 1, r, x);pushup(pos);
}vector <pii> vec;signed main(void) {for (read(T); T; T--) {read(n); vec.clear();for (int i = 1; i <= n; i++)read(a[i]), vec.push_back(Mp(a[i], i));build(1, 1, n); sort(vec.begin(), vec.end());int ret = 0;for (auto u : vec) {int x = u.first, y = u.second;chkmax(ret, x + getmax(1));a[y] = -1;modify(1, 1, n, y);}writeln(ret);}//fwrite(pf, 1, o1 - pf, stdout);return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Hadoop详细安装步骤,附带安装完的虚拟机。

Hadoop集群搭建笔记 环境:window11家庭中文版 23H2 VMware16.1.2 镜像:CentOS-7-x86_64-DVD-2009.iso jdk:jdk-8u202-linux-x64.tar.gz hadoop:hadoop-3.3.5.tar.gz 集群分布主机 角色node1(192.168.100.100) NN DN RM NMnode2(192.168.100.101) SNN DN …

Nuxt.js 应用中的 app:redirected 钩子详解

title: Nuxt.js 应用中的 app:redirected 钩子详解 date: 2024/10/3 updated: 2024/10/3 author: cmdragon excerpt: app:redirected 是 Nuxt.js 中的一个钩子,主要用于处理服务器端渲染(SSR)过程中发生的重定向。该钩子在重定向被执行之前被调用,允许开发者在重定向发生前…

全网最适合入门的面向对象编程教程:55 Python字符串与序列化-字节序列类型和可变字节字符串

在Python中,字符编码是将字符映射为字节的过程,而字节序列(bytes)则是存储这些字节的实际数据结构,字节序列和可变字节字符串的主要区别在于其可变性和用途,bytearray是可变的字节序列,允许修改其内容。全网最适合入门的面向对象编程教程:55 Python 字符串与序列化-字节…

Zookeeper 基础学习

Zookeeper 基础学习 ​ Zookeeper 官网: http://zookeeper.apache.org/ 注:以下操作在CentOS7环境操作。 ​ Zookeeper 是 Apache 的一个分布式服务框架,是 Apache Hadoop 的一个子项目。官方文档上这么解释 Zookeeper,它主要是用来解决分布式应用中经常遇到的…

妙用编辑器:把EverEdit变成计算器

妙用编辑器:把EverEdit变成计算器 应用场景 日常工作过程中,会存在需要计算一些数据的场景,调用系统的计算器当然可以完成这项工作,但是需要来回切换,且系统自带的计算器没有表达式计算功能,真是不方便。 解决办法 一般比较流行的文本编辑器都支持脚本语言,比如:EverEd…

轻松搞定Java毕设:为全国大学生提供高效、优质的Java毕业设计代做服务

随着毕业季的临近,许多大学生面临着毕业设计的巨大压力。尤其是对于那些选择计算机相关专业的学生来说,毕业设计通常要求在一个较短的时间内完成复杂的项目开发,这对于技术掌握尚不成熟的学生来说无疑是一个巨大的挑战。再加上其他课程的压力和生活的琐事,毕业设计可能会成…

JAVA毕设代做(项目+论文+源码)

马上就要做毕业设计啦,计算机专业的小伙伴们终于开始紧张啦~ 但是Java相关的毕业设计,真的太难啦,都不知道做什么选题!!! 如果你平时没认真学,那么很可能根本就不知道怎么做毕业设计! 尤其是对于摸鱼上瘾的同学,稍不注意就容易挂掉! 大家现在担心的无非下面几点! 我…

星座图整形技术在光纤通信中的matlab性能仿真,分别对比标准QAM,概率整形QAM以及几何整形QAM

1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印):2.算法涉及理论知识概要星座图整形技术(Constellation Shaping Techniques)是现代光纤通信系统中提升数据传输效率的关键技术之一,通过优化星座点的布局和调制符号的使用概率,能在不增加系统功率或带宽的…