A

让 \(c\) 保存数组中所有最大的数,如果所有数都相等则 \(-1\)。

B

只需要记录每个序列的最小值和次小值,然后对次小值求前后缀和。

C

枚举最大值 \(mx\),然后遍历 \(i:n\sim 1\)。对于 \(i\),取最大数 \(x\) 满足 \(x\) 未选且 \(i\times x \le mx\)。

证明:假设 \(i\) 原本与 \(x\) 匹配,现在与 \(x1\) 匹配,显然 \(x1<x\),否则 \(i\cdot x1>mx\);\(x\) 与 \(i1\) 匹配,\(i1<i\) 因为更晚选。交换 \(x,x1\) 后总和增加 \((i-i1)(x-x1)>0\),并且此时最大值依旧为 \(mx\)。

D

将每个 \(b_i,x_j,l_i\) 视作一个 “事件” 存到数组里,按坐标排个序,从最右边的位置向左遍历,在数轴上做类似扫描线的操作。(扫描点?)

定义 \(ans_i\) 为第 \(i\) 条线段最远能跳多远,\(p_j\) 为询问 \(x_j\) 的答案,显然 \(p_j=\max(x_j,ans_i|l_i\le x_j\le r_i)\)。

如果当前遇到了一个 \(b_i\),更新 \(ans_i\) 为当前集合中所有 \(ans\) 的最大值(最靠右的),同时把 \(ans_i\) 加入集合中。

如果当前遇到了一个 \(x_j\),更新 \(p_j\) 为当前集合中所有 \(ans\) 的最大值,再和 \(x_j\) 取 \(\min\)。

如果当前遇到了一个 \(l_i\),从集合中删除 \(ans_i\)。

可以用 set 维护。

E

\(dp[i][j]\) 表示前 \(i\) 个数里选的区间长度和为 \(j\) 的最大价值。

\(dp[i][j]=\max(dp[i-1][j],dp[i-l][j-l]+cost(i-l+1,i)|1\le l\le j).\)

\(cost(i-l+1,i)\) 就是区间 \([i-l+1,i]\) 的价值。

观察发现 \(cost(l,r)=|b_l-a_r|+|b_r-a_l|\) 始终等于 \(\max(b_l-a_r+b_r-a_l,-b_l+a_r+b_r-a_l,b_l-a_r-b_r+a_l,-b_l+a_r-b_r+a_l).\)

同时,我们发现 \(dp\) 值之间只有 \(i-j\) 不变才能更新。

我们可以维护四个数组:\(mn1[x],mx1[x],mn2[x],mx2[x]\),分别表示要求 \(i-j=x\) 时,\(-dp[i][j]+b_i+a_i\) 的最小值,\(dp[i][j]+b_i+a_i\) 的最大值,\(-dp[i][j]+b_i-a_i\) 的最小值,\(dp[i][j]+b_i-a_i\) 的最大值。

然后我们求 \(dp[i][j]\) 的时候,就可以根据 \(i-j\) 调用四个数组,根据上面 \(cost\) 的公式加减一下,四种情况都取 \(\max\)。大幅优化。

F

随机推荐

  1. Data truncated for column '字段名' at row 1 的解决方法

    1.原因: 修改表结构 XXX 为 not null 时,表数据  XXX 字 段 存在 null 值. 2.解决: 去掉或修改 带有 null 值 的 ( 需要设置 not null 的) 字段

  2. ONVIF网络摄像头(IPC)客户端开发—RTSP RTCP RTP加载H264视频流

    前言: RTSP,RTCP,RTP一般是一起使用,在FFmpeg和live555这些库中,它们为了更好的适用性,所以实现起来非常复杂,直接查看FFmpeg和Live555源代码来熟悉这些协议非常吃力, ...

  3. Java21 + SpringBoot3整合Redis,使用Lettuce连接池,推荐连接池参数配置,封装Redis操作

    目录 前言 相关技术简介 Redis 实现步骤 引入maven依赖 修改配置文件 定义Redis配置类 定义Redis服务类,封装Redis常用操作 使用Redis服务类 总结 前言 近日心血来潮想做 ...

  4. [转帖]一篇来自网络的关于“enqueue”events的简短参考

    https://www.cnblogs.com/lhdz_bj/p/8716701.html 仅供自己和各位同学参考: Enqueue Type Description enq: AD - alloc ...

  5. [转帖]三篇文章了解 TiDB 技术内幕 - 说存储

    https://cn.pingcap.com/blog/tidb-internal-1 引言 数据库.操作系统和编译器并称为三大系统,可以说是整个计算机软件的基石.其中数据库更靠近应用层,是很多业务的 ...

  6. Beyond Compare 的比较以及导出的简单设置方法

    最近需要对文件进行对比 但是发现对比的工作量比较难搞. 用到了beyond compare 的工具 感觉挺好用的 但是需要注意事项比较多这里记录一下 1.  session setting 里面进行设 ...

  7. Mybatis 拦截器实现单数据源内多数据库切换 | 京东物流技术团队

    物流的分拣业务在某些分拣场地只有一个数据源,因为数据量比较大,将所有数据存在一张表内查询速度慢,也为了做不同设备数据的分库管理,便在这个数据源内创建了多个不同库名但表完全相同的数据库,如下图所示: 现 ...

  8. Redis极简教程

    简介 Redis 是用C语言开发完全开源免费的,遵守BSD协议的,一个高性能的,key-value型的,NOSQL数据库. 特点 可以将内存中的数据持久化到硬盘中,重启的时候可以从硬盘中再次加载 拥有 ...

  9. 学习MySQL中DDL语句的修改字段与删除字段,删除表

    连接本地mysql语句 mysql -hlocalhost -uroot -proot 显示表结构 语法:desc 表名 查看某一个表结构以及注释 语法:show create table 表名 sh ...

  10. 加快ios的出包速度

    在导出ipa时,通过这几种方法,可以更快地导出ipa来进行测试 不勾选bitcode 在导出ipa时,不勾选bitcode,这样会加快出包的速度,但导出来的ipa会大一些,关于bitcode可查看:& ...