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 ...
随机推荐
- JWT和OAuth2
JWT是一种认证协议 JWT提供了一种用于发布接入令牌(Access Token),并对发布的签名接入令牌进行验证的方法.令牌(Token)本身包含了一系列声明,应用程序可以根据这些声明 ...
- Improved Variational Inference with Inverse Autoregressive Flow
目录 概 主要内容 代码 Kingma D., Salimans T., Jozefowicz R., Chen X., Sutskever I. and Welling M. Improved Va ...
- [opencv]图像预处理方案及方式
像识别中,图像质量的好坏直接影响识别算法的设计与效果精度,那么除了能在算法上的优化外,预处理技术在整个项目中占有很重要的因素,然而人们往往忽略这一点. 图像预处理,将每一个文字图像分检出来交给识别模块 ...
- MySQL创建数据库 easyShopping,包括area表、goods表、customer表、orders表、ordersdetall表、test表
MySQL创建数据库 easyShopping,包括area表.goods表.customer表.orders表.ordersdetall表.test表 商品表表结构: 字段名 说 明 类 型 长 度 ...
- Ranger-Hdfs插件安装
Ranger-Hdfs插件ranger-0.6.0-hdfs-plugin安装到Hdfs的所有NameNode节点, 其他的DataNode节点不需要安装. 1. 登陆hdfs安装的用户,hdfs/z ...
- DES对称加密算法实现:Java,C#,Golang,Python
数据加密标准(DES,Data Encryption Standard,简写DES)是一种采用块密码加密的对称密钥算法,加密分组长度为64位,其中8.16.24.32.40.48.56.64 等8位是 ...
- Flask_响应(四)
响应即视图函数的返回值,前面的例子的返回值都很简单,直接返回值.但是Flask Http协议的返回值中通常还会有以下几种不同的方式. 一.return元组 通过return一个元组构造响应信息. 语法 ...
- JDBC 处理sql查询多个不确定参数
JDBC程序,为了防止SQL注入,通常需要进行参数化查询,但是如果存在多个不确定参数,就比较麻烦了,查阅了一些资料,最后解决了这个问题,现在这里记录一下: public List<TabDl ...
- 移动端调试 - UC浏览器开发者版 - WIFI
Chrome 功能特性 支持PC或Pad设备,实时调试手机网页 DOM.CSS.JS调试 多功能面板满足多种调试需求 1 准备工作 保证手机与PC处于同一个无线网段. 下载Android平台的U ...
- Flowable实战(一)启动第一个完整流程
一.前言: 发现网上关于Flowable的资料基本都是浅尝辄止,对如何构建一个企业级的流程应用说明很少,所以写个实战系列,希望对大家和自己,都有所帮助. 二.认识Flowable Flowab ...