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的更多相关文章

  1. 【题解】Atcoder ARC#90 F-Number of Digits

    Atcoder刷不动的每日一题... 首先注意到一个事实:随着 \(l, r\) 的增大,\(f(r) - f(l)\) 会越来越小.考虑暴力处理出小数据的情况,我们可以发现对于左端点 \(f(l) ...

  2. AtCoder ARC 076E - Connected?

    传送门:http://arc076.contest.atcoder.jp/tasks/arc076_c 平面上有一个R×C的网格,格点上可能写有数字1~N,每个数字出现两次.现在用一条曲线将一对相同的 ...

  3. AtCoder ARC 076D - Built?

    传送门:http://arc076.contest.atcoder.jp/tasks/arc076_b 本题是一个图论问题——Manhattan距离最小生成树(MST). 在一个平面网格上有n个格点, ...

  4. AtCoder ARC 082E - ConvexScore

    传送门:http://arc082.contest.atcoder.jp/tasks/arc082_c 本题是一个平面几何问题. 在平面直角坐标系中有一个n元点集U={Ai(xi,yi)|1≤i≤n} ...

  5. Atcoder ARC 082C/D

    C - Together 传送门:http://arc082.contest.atcoder.jp/tasks/arc082_a 本题是一个数学问题. 有一个长度为n的自然数列a[1..n],对于每一 ...

  6. 【题解】 AtCoder ARC 076 F - Exhausted? (霍尔定理+线段树)

    题面 题目大意: 给你\(m\)张椅子,排成一行,告诉你\(n\)个人,每个人可以坐的座位为\([1,l]\bigcup[r,m]\),为了让所有人坐下,问至少还要加多少张椅子. Solution: ...

  7. 【题解】Atcoder ARC#96 F-Sweet Alchemy

    首先,我们发现每一个节点所选择的次数不好直接算,因为要求一个节点被选择的次数大于等于父亲被选择的次数,且又要小于等于父亲被选择的次数 \(+D\).既然如此,考虑一棵差分的树,规定每一个节点被选择的次 ...

  8. AtCoder ARC 090 E / AtCoder 3883: Avoiding Collision

    题目传送门:ARC090E. 题意简述: 给定一张有 \(N\) 个点 \(M\) 条边的无向图.每条边有相应的边权,边权是正整数. 小 A 要从结点 \(S\) 走到结点 \(T\) ,而小 B 则 ...

  9. 【题解】Atcoder ARC#67 F-Yakiniku Restaurants

    觉得我的解法好简单,好优美啊QAQ 首先想想暴力怎么办.暴力的话,我们就枚举左右端点,然后显然每张购物券都取最大的值.这样的复杂度是 \(O(n ^{2} m)\) 的.但是这样明显能够感觉到我们重复 ...

  10. 【题解】Atcoder ARC#85 E-MUL

    ……没啥可说的.最大权闭合子图,跑下dinic就好了…… #include <bits/stdc++.h> using namespace std; #define maxn 500000 ...

随机推荐

  1. 论文翻译:2020_ACOUSTIC ECHO CANCELLATION WITH THE DUAL-SIGNAL TRANSFORMATION LSTM NETWORK

    论文地址:https://ieeexplore.ieee.org/abstract/document/9413510 基于双信号变换LSTM网络的回声消除 摘要 本文将双信号变换LSTM网络(DTLN ...

  2. 【jvm】07-偏向锁、轻量锁、重量锁到底是啥?

    [jvm]07-偏向锁.轻量锁.重量锁到底是啥? 欢迎关注b站账号/公众号[六边形战士夏宁],一个要把各项指标拉满的男人.该文章已在github目录收录. 屏幕前的大帅比和大漂亮如果有帮助到你的话请顺 ...

  3. Android物联网应用程序开发(智慧城市)—— 摄像头监控界面开发

    效果: 布局代码: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns: ...

  4. MySQL数据库基础(1)数据库基础

    目录 一.数据库简介 二.mysql数据库 三.客户端连接mysql服务 四.Navicat for mysql 一.数据库简介 1.概念 (1)数据:如文字.图形.图像.声音以及学生的档案记录等,这 ...

  5. Java程序设计基础笔记 • 【目录】

    持续更新中- 我的大学笔记>>> 章节 内容 实践练习 Java程序设计基础作业目录(作业笔记) 第1章 Java程序设计基础笔记 • [第1章 初识Java] 第2章 Java程序 ...

  6. 分布式链路追踪自从用了SkyWalking,睡得真香!

    本篇文章介绍链路追踪的另外一种解决方案Skywalking,文章目录如下: 什么是Skywalking? 上一篇文章介绍了分布式链路追踪的一种方式:Spring Cloud Sleuth+ZipKin ...

  7. golang 算法题 : 两数相加

    package mainimport "fmt"type ListNode struct { Val int Next *ListNode}func main() { l1 := ...

  8. C语言 Make命令教程

    make只是一个根据指定的Shell命令进行构建的工具 在linux和unix中,有一个强大的使用程序,叫make,可以用它来管理多模块程序的编译和链接,直至生成可执行文件 make使用程序读取一个说 ...

  9. [ flask ] flask-restful 实现嵌套的有关系的输出字段

    问题描述: 1. 先说明数据关系:有用户,和菜谱.一个用户可以拥有多个菜谱:一对多的关系 2.  resources/users.py 的输出字段: user_fields = { 'id':fiel ...

  10. CSS中inherit指定继承的使用方法和auto的区别

    CSS中的每个属性都有一个特定值"inherit",其含义是指定继承父元素的相应属性,使用inherit一方面在代码上能地表明要继承于父元素的样式属性,另一方面也使子元素继承了那些 ...