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 ...
随机推荐
- BAIRE ONE FUNCTIONS (Baire第一类函数)
目录 定义 导函数 一致收敛性质 的连续点 JOHNNY HU, BAIRE ONE FUNCTIONS. 一些基本的定义(诸如逐点收敛, 一致收敛\(F_{\sigma}\)集合等)就不叙述了. 定 ...
- tcache BUUCTF gyctf_2020_signin
Ubuntu18.04的题 用到了两个特性: 一个是 calloc 的特点:不会分配 tcache chunk 中的 chunk 另一个是 tcache 的特点:在分配 fastbin 中的 chun ...
- HTML5 +Java基础 大一结业认证考试试题 - 云南农业职业技术学院 - 互联网技术学院 - 美和易思校企合作专业
第1题 [单选题][0.33分][概念理解] 关于java中的逻辑运算符,下列说法正确的是 逻辑运算符||.&&.!都是用于连接两个关系表达式</p> 当&&am ...
- Salesforce LWC学习(三十九) lwc下quick action的recordId的问题和解决方案
本篇参考: https://developer.salesforce.com/docs/component-library/bundle/force:hasRecordId/documentation ...
- 探索 dotnet core 为何在 Windows7 系统需要补丁的原因
在一些 Windows 7 系统上,根据 dotnet 官方文档,需要安装上 KB2533623 补丁,才能运行 dotnet core 或 .NET 5 等应用.尽管非所有的设备都需要安装此,但这也 ...
- tomcat启动卡在了 At least one JAR was scanned for TLDs yet contained no TLDs 的根本原因与解决办法
1.前言 有时候服务器开启时启动不了,卡在了 org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned fo ...
- centos 操作系统优化
命令提示符优化 修改PS1环境变化 vim /etc/profile #在最后一行添加 export PS1='[\u@\H \w]$' \u ---显示当前登录用户名称 \h ---显示系统主机名称 ...
- pycharm常用设置项和快捷键
python开发工具pycharm非常人性化,使用方便,功能强大,可以做到与项目配置库结合使用.初次使用,一些设置项和快捷键不那么容易被发现和设置,那么给大家下面总结pycharm常用的设置项和快捷键 ...
- 【Android】安卓开发中的布局与事件
[Android]安卓开发中的布局与事件 1.Android Studio下载配置 非常简单的百度然后点击下载安装就好了.注意的是,本来我是打算使用评价还不错的Genymotion这个软件来充当虚拟机 ...
- nRF24L01无线模块笔记
nRF24L01模块 官网链接: https://www.nordicsemi.com/Products/nRF24-series 常见的无线收发模块, 工作在2.4GHz频段, 适合近距离遥控和数据 ...