Atcoder ARC-063
ARC063(2020.7.16)
A
\(A\) 题如果洛谷评分很低就不看了。
B
可以发现一定是选择在一个地方全部买完然后在之后的一个地方全部卖完,那么我们就只需要即一个后缀最大值就可以计算答案了。但题目要求我们使得利润至少减一,实际上我们将买的地方价格提升 \(1\) 即可,因为 \(a_i\) 相异,那么每一对买卖价格都不会互相影响,题目问的实际上就是有多少个位置能获得最大利润,直接枚举买的位置即可。
C
首先我们可以发现这样一件事情,对于一对已经确定权值的点对 \((i, j)\),中间过程中点权的变化过程可以看作一个点再平面直角坐标系下往右上或者右下移动,于此同时我们在这两个点之间连一条边,可以发现实际上我们可以平移这些线段使得整个变化过程形成一个山峰状,这样一来我们可以看作是两个点互相往中间上升的一个过程,换句话说就是我们每次选择一个位置低的点把他往上挪一格,那么最终两个点一定能够相遇,于是我们就有了一个贪心的思路,那么这个思路放在多个点的情况下是否适用呢?答案是可以的,可以感受一下如果有多个点经过上述的贪心操作实际上是先选择了两个点打通,然后其余的点再和这条路径上的点打通的过程,因为我们每次贪心选择最小的点扩展,是一定能尽可能使得两个点在同一高度相遇的,于是利用上述的贪心我们就可以愉快地过掉这道题。
然而官方标算是这样的,可以发现我们可以求出每个点可以选择的取值范围(用父亲限定儿子或用儿子限定父亲做两次树形 \(dp\) ,于此同时每个点的奇偶性是确定的,我们还需要从每个点开始向周围 \(dfs\) 奇偶染色求出奇偶性,最终判断一下无解情况自上而下在取值范围内构造一组解即可。
D
首先我们可以发现原问题等价于求解这样一个问题:在一个大矩形内给定 \(n\) 个关键点,现在需要找到在大矩形内周长最大的一个矩形使得其内部(不含边界)不包括关键点。首先按照套路我们可以使用 \(\rm CDQ\) 分治,为了方便起见我们分别讨论跨过横中轴线的答案和跨过竖中轴线的答案,下面以跨过横中轴线的答案为例,竖的直接将 \(x, y\) 翻转即可。可以考虑枚举上边界和下边界,再下边界不断向下递减时顺便扫一遍左右边界的位置这样就可以做到 \(O(n ^ 2)\) 了。可以发现我们可以动态维护每个下边界的答案,枚举上边界计算答案,不难发现我们能选择的区间一定会越变越小,那么两边能选区间将会满足单调性,于是在枚举上边界的同时,我们可以考虑计算当前上边界的左右边界然后修改一段区间,因为修改实际上是将一段区间推平,首先可以线段树二分到最后一个需要修改的位置,然后这段区间的答案实际上之和右端点单独的答案有关,于是我们再记录一个右端点单独的答案即可,修改左端点时同理,那么这道题我们就可以 \(O(n \log ^ 2 n)\) 做完了,实际上是可以做到 \(O(n \log n)\) 的,不难发现我们可以选择一长条的矩形或者一竖条的矩形,这部分的答案就是 \(2 \times \max(h, w) + 2\) 如果我们选择的矩形不会经过横着的中线或者竖着的中线那么一定会在某个四分之一的小格中,那么这部分的答案最多是 \(2 \times (\frac{h}{2}, \frac{w}{2}) = h + w \le 2 \times \max(h, w) + 2\),因此我们选择的矩形一定会跨过中线,那么 \(\rm CDQ\) 就不需要了,于是复杂度就变成了 \(O(n \log n)\).
官方标算是这样一个做法,同样需要上面的转化和上面的性质,只是最终统计答案的时候有所不同。还是只考虑跨过横着的中线的情况,我们考虑将每个点按照横坐标排序,从左至右依次枚举每个点作为右端点的情况,用一颗线段树维护之前每个点左端点竖着能到达的最远距离减去横坐标的最大值,那么我们每次维护这颗线段树只需要将一个点左边第一个比他小的位置右边所有点的答案在线段树上修改即可,这个寻找的过程可以使用单调栈,具体过程看代码。
Atcoder ARC-063的更多相关文章
- 【题解】Atcoder ARC#90 F-Number of Digits
Atcoder刷不动的每日一题... 首先注意到一个事实:随着 \(l, r\) 的增大,\(f(r) - f(l)\) 会越来越小.考虑暴力处理出小数据的情况,我们可以发现对于左端点 \(f(l) ...
- AtCoder ARC 076E - Connected?
传送门:http://arc076.contest.atcoder.jp/tasks/arc076_c 平面上有一个R×C的网格,格点上可能写有数字1~N,每个数字出现两次.现在用一条曲线将一对相同的 ...
- AtCoder ARC 076D - Built?
传送门:http://arc076.contest.atcoder.jp/tasks/arc076_b 本题是一个图论问题——Manhattan距离最小生成树(MST). 在一个平面网格上有n个格点, ...
- AtCoder ARC 082E - ConvexScore
传送门:http://arc082.contest.atcoder.jp/tasks/arc082_c 本题是一个平面几何问题. 在平面直角坐标系中有一个n元点集U={Ai(xi,yi)|1≤i≤n} ...
- Atcoder ARC 082C/D
C - Together 传送门:http://arc082.contest.atcoder.jp/tasks/arc082_a 本题是一个数学问题. 有一个长度为n的自然数列a[1..n],对于每一 ...
- 【题解】 AtCoder ARC 076 F - Exhausted? (霍尔定理+线段树)
题面 题目大意: 给你\(m\)张椅子,排成一行,告诉你\(n\)个人,每个人可以坐的座位为\([1,l]\bigcup[r,m]\),为了让所有人坐下,问至少还要加多少张椅子. Solution: ...
- 【题解】Atcoder ARC#96 F-Sweet Alchemy
首先,我们发现每一个节点所选择的次数不好直接算,因为要求一个节点被选择的次数大于等于父亲被选择的次数,且又要小于等于父亲被选择的次数 \(+D\).既然如此,考虑一棵差分的树,规定每一个节点被选择的次 ...
- AtCoder ARC 090 E / AtCoder 3883: Avoiding Collision
题目传送门:ARC090E. 题意简述: 给定一张有 \(N\) 个点 \(M\) 条边的无向图.每条边有相应的边权,边权是正整数. 小 A 要从结点 \(S\) 走到结点 \(T\) ,而小 B 则 ...
- 【题解】Atcoder ARC#67 F-Yakiniku Restaurants
觉得我的解法好简单,好优美啊QAQ 首先想想暴力怎么办.暴力的话,我们就枚举左右端点,然后显然每张购物券都取最大的值.这样的复杂度是 \(O(n ^{2} m)\) 的.但是这样明显能够感觉到我们重复 ...
- 【题解】Atcoder ARC#85 E-MUL
……没啥可说的.最大权闭合子图,跑下dinic就好了…… #include <bits/stdc++.h> using namespace std; #define maxn 500000 ...
随机推荐
- 使用 DML语句,对 “锦图网” 数据进行操作,连接查询(内连接,左外连接,右外连接,全连接)
查看本章节 查看作业目录 需求说明: 对 "锦图网" 数据进行操作: 统计每一种线路类型的线路数量.最高线路价格.最低线路价格和平均线路价格,要求按照线路数量和平均线路价格升序显示 ...
- 编写Java程序,通过接口摸拟麦当劳食物生产过程,接口设计
返回本章节 返回作业目录 需求说明: 通过接口摸拟麦当劳食物生产过程 实现思路: 通过接口摸拟麦当劳食物生产过程的实现思路: 创建接口食物(Food),该接口需要被所有的食物类所实现.在该接口中定义g ...
- css 基础 css引入方式
color:red; //改变颜色 font-size:18px : //改变文字大小 background-color : blue; //设置背景颜色 width:100px ://设置宽度 he ...
- Nginx-正反向代理及负载均衡
目录 正/反向代理 代理的方式 Nginx代理服务支持的协议 代理实战 部署web01 部署Lb01 Nginx代理常用参数 添加发往后端服务器的请求头信息 代理到后端的TCP连接.响应.返回等超时时 ...
- linux 之 DolphinScheduler 安装步骤
下载安装包 直接进官网下载 https://dolphinscheduler.apache.org/zh-cn/download/download.html 参考官方文档 https://dolphi ...
- 初识python: random 模块
random 顾名思义,就是取 随机数,需要导入random模块. import random 1.随机获取一个0到1之间的小数(不含首尾) print(random.random()) 2.随机获取 ...
- java 方法 compareTo()的正确使用
总结:(1)如果比较的是数字 则结果大于则为1 等于则为0 小于则为-1(2)如果比较的是字符[串] 则按照从左到右排序找对应不一样的字符第一个字符, 然后将字符装对应的ASCLL码数字,做减法运算, ...
- spring cloud --- Zuul --- 心得
spring boot 1.5.9.RELEASE spring cloud Dalston.SR1 1.前言 什么是 Zuul? Zuul是微服务网关,与Gateway类似 ,根据请 ...
- Windows 10 如何在当前位置打开 CMD 命令窗口?
方法一 Win + R 键召唤出运行窗口,然后输入 "CMD" 打开命令提示符. 使用 cd 命令更改当前命令提示符的工作环境. 注释 cd/ - 退到当前所在盘符 cd.. - ...
- 通过了解Servlet和Http之间的关系,了解web中http通信使用(二)
注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6512399401825075719/ 1.<Servlet简单实现开发部署过程> 2.<Serv ...