Topcoder MaxSquare 和 [USACO19FEB]Mowing Mischief
2021-01-16 15:11
标签:variant 输入输出 play return 中间 open sub not app 给定一个长度为 \(n\) 的序列 \(B_1, B_2,\dots, B_n\),在此基础上构造了一个矩阵 \(A\),满足 \(A_{i,j}= b_i+ b_j\)。求 \(A\) 权值和最大的子正方形。 \(n ≤ 10^5\)。 既然 \(A\) 的构造方式很独特,那么我们先把答案式暴力展开。 \[
ans=\max_{c=1}^n \max_{x,y} \sum_{i=x}^{x+c-1}\sum_{i=y}^{y+c-1} A_{i,j}\=\max_{c=1}^n \max_{x,y} \sum_{i=x}^{x+c-1}\sum_{i=y}^{y+c-1} (B_i+B_j)\=\max_{c=1}^n c \max_{x,y} \left(\sum_{i=x}^{x+c-1}B_i+\sum_{i=y}^{y+c-1} B_j\right)\\] \(x,y\) 的枚举是等价的,两者最终的结果一定是一样的,所以改成两倍。 \[
ans=2\max_{c=1}^n c \max_x \sum_{i=x}^{x+c-1}B_i\=2\max_{c=1}^n c \max_x (S_{x+c-1}-S_{x-1})
\] 将 \(c\) 的枚举转化为差计算。 \[
ans=2 \max_{j 将 \((i,S_i)\) 看成点,那么我们要找的就是两个点构成的矩形面积的最大值。 注意到若 \(j_1 ,那么选 \(j_2\) 做左下角一定不优;若 \(i_1 ,那么选 \(i_1\) 做右上角一定不优。 我们可以用单调栈预处理出哪些点可以做左下角,哪些点可以做右上角。左下角一定是下凸壳的形式,右上角一定是上凸壳的形式。 若左下角有决策点 \(y ,右上角有决策点 \(i ,并且 \(i\) 的最优方案是 \(x\),那么有 \[
(i-x)(S_i-S_x) > (i-y)(S_i-S_y)\xS_x-yS_y-(x-y)S_i-i(S_x-S_y) > 0
\] 因为 \(-(x-y) 0\) 而 \(j>i,S_j \[
(j-x)(S_j-S_x) > (j-y)(S_j-S_y)
\] 所以这个最优方案具有决策单调性。那么写一个值域分治就好了。 时间复杂度大概一个log? Bessie的表妹Ella和Bella正在参观农场。不幸的是,自从他们到达以来,他们一直在恶作剧。 在他们的最新计划中,他们决定尽可能多地割草。农场的草地是 的正方形。左下角是 ,右上角是 。因此,正方形包含 个格点(具有整数坐标的点)。 Ella和Bella计划从 开始并以每秒一个单位长度的速度运行到 ,同时每只奶牛都握住非常锋利且非常有弹性的线的一端。任何被这根电线扫过的区域的草都会被切断。Ella和Bella可能采取不同的路径,但她们只会向上或者向右移动,从一个格点移动到另一个格点。 Bessie非常担心会切割太多的草,所以她发明了一个聪明的计划来限制Ella和Bella的路径。在整个草原上散布着 种花( ),每种花都在一个特定的格点上。 Bessie将从这些花中挑选一个子集 , 集合中的花Ella和Bella都需要经过(Ella和Bella的路径都必须经过 中的所有花朵)。 Ella和Bella将会切割面积尽可能大的草,请帮助Bessie确定集合 使得在 集合尽可能大的情况下被切割的草的面积最小。 输入第一行包括两个数 。 接下来 行每行包含两个数 ,代表一种花的位置。保证没有两种不同的花在同一位置上。 输出一个整数,即被切割的草的面积的最小值。 选择 和 这两个位置上的花,可以使得被切割的草的面积最小。 子任务:对于 的数据, 。 那个割草其实就是两个点之间的矩形面积,所以说这题求的就是找出极大纵坐标最长上升子序列,并使得相邻两点之间构成的矩形面积和最小,坐标没有重复的,出题人很良心。 发现在最长上升子序列中每个点的排名是固定的,所以可以按照排名把点分层,每层之间转移。 考虑每层之间如何转移,每层的点一定是从左上到右下的,并且这个转移具有单调性,即后一层的点后移的时候,前一层的要最优必须前移才行。而这种单调性可以使用整体二分解决,即先找后一层中间的点的最优转移在前一层的那个点,更新答案后左右递归分治,时间复杂度\(O(n \log n)\)。 但是相邻两层之间并不是每个点都可以互相转移到的,所以要维护前一层哪些点能转移到后一层的哪些点。显然后一层的每个点一定能被前一层的一个区间内的点转移到,也就是每一次都给一个区间添上到后一层的某个点的转移。这个可以用线段树分治来维护,即把待操作的区间按照线段树的方式分解成\(O(\log n)\)个区间添上转移,最后遍历线段树处理转移。 总时间复杂度\(O(n \log^2 n)\) Topcoder MaxSquare 和 [USACO19FEB]Mowing Mischief 标签:variant 输入输出 play return 中间 open sub not app 原文地址:https://www.cnblogs.com/autoint/p/10599067.htmlMaxSquare
推式子
分治套路
vector
Mowing Mischief
题目描述
输入输出格式
输入格式:
输入输出样例
5 20
19 1
2 6
9 15
10 3
13 11
117
说明
B君的讲课
co int N=2e5+10;
int n;
pair
文章标题:Topcoder MaxSquare 和 [USACO19FEB]Mowing Mischief
文章链接:http://soscw.com/index.php/essay/42760.html