Hackerrank: Week of Code 36
题目简述:给定$n \times m$的矩阵$a[][]$,要求选择一个$x \times 1(1 \leq x \leq k)$的(连续)子矩阵并清零后,找到最大和的(连续)子矩阵。
数据范围:$1 \leq n, m, k \leq 380$。
题解:
子矩阵可以用四个参数表示$(x_1, y_1, x_2, y_2)$,其中$(x_1, y_1)$是其左上角,$(x_2, y_2)$是其右下角。
我们枚举子矩阵的$y_1$和$y_2(1 \leq y_1 \leq y_2 \leq m)$,令$c[i] = a[i][y_1]+\dots+a[i][y_2](1 \leq i \leq n)$。
接着枚举子矩阵经过的某行$x(1 \leq x \leq n)$,则经过第$x$行的子矩阵的最大和为
($c[1], \dots, c[x-1]$的最大后缀和)+($c[x+1], \dots, c[n]$的最大前缀和)+(把$a[x][y_1], \dots, a[x][y_2]$中连续不超过$k$个值清零的最大和)
前两个可以预处理得到,关键在于第三个部分。
注意到
(把$a[x][y_1], \dots, a[x][y_2]$中连续不超过$k$个值清零的最大和)=c[x]-($a[x][y_1], \dots, a[x][y_2]$中连续不超过$k$个的最小和)
后者可以利用单调队列求得。
时间复杂度$O(n^3)$。
注:单调队列求数组$a[1], \dots, a[n]$的长度不超过$k$的连续子数组最小和。令$s[i] = a[1]+\dots+a[i]$表示其前缀和。
即需依次对每个$1 \leq i \leq n$,求
$$ \min_{i-k \leq j \leq i} \{s[i]-s[j]\} = s[i] - \max_{i-k \leq j \leq i} \{s[j]\} $$
从而维护区间$[i-k, i]$的最大值即可。
题目简述:依次给出$n$个二维点$(x[i], y[i])$以及$1 \leq z[i] \leq i$,且$x[i] < x[i+1]$严格递增。强制在线依次回答
$$ \max_{1 \leq j \leq z[i]} {x[j]*y[i]-y[j]*x[i]} $$
数据范围:$1 \leq n \leq 1,000,000.$
题解:
先不考虑强制在线,即允许离线回答,则可把询问按照$z[i]$从小到大排序,然后依次维护下凸壳,回答询问时,由于下凸壳斜率单调递增,二分答案即可。
若强制在线,则可持久化维护下凸壳即可。但$n$很大,常数以及空间复杂度承受不了,只能另辟蹊径。
注意到$x[i]$严格单调增,故所维护的下凸壳的各个历史版本(history version)中,每个点(如果这个点在当前下凸壳上的话)在下凸壳上的前驱是【固定】的。
对每个点,倍增地维护这个点的$2^k$次前驱,如$pre[i][k]$就可表示第$i$个点的$2^k$次前驱。
二分答案时利用倍增特点,可在$O(\log n)$复杂度内解决。
时间空间复杂度均为$O(n \log n)$。
Hackerrank: Week of Code 36的更多相关文章
- HackerRank Week of Code 26
好像这次week of code不是很难= = A int main(){ int n; int m; cin >> n >> m; cout<<(n+)/*)/) ...
- 【HackerRank Week of Code 31】Colliding Circles
https://www.hackerrank.com/contests/w31/challenges/colliding-circles/problem 设E(n)为序列长度为n时的期望值. \[ \ ...
- hackerrank Week of Code 31
https://www.hackerrank.com/contests/w31/challenges Beautiful Word 模拟 Accurate Sorting 检查每个数字距离原位是否都不 ...
- 【hackerrank week of code 26】Hard Homework
[题目链接]:https://www.hackerrank.com/contests/w26/challenges/hard-homework/problem [题意] 给你一个式子:sin(x)+s ...
- hackerrank [Week of Code 33] Bonnie and Clyde
任意门 题意:给一个图,每次询问给三个点a,b,c,问是否存在一条从a到c,一条b到c的路径除c外无交点. 双连通分量缩点建出圆方树是必须的,然后我们需要判断c是否在a到b的路径上,或者c的某个相邻的 ...
- 【枚举约数】HackerRank - Week of Code 26 - Satisfactory Pairs
题意:给你一个正整数n,问你存在多少个正整数对a,b(a<b),满足条件:存在正整数x,y,使得ax+by=n. 就预处理出n以内所有数的约数,然后暴力枚举a,暴力枚举x,然后枚举n-ax的所有 ...
- Hadoop Exit Code 含义
经常遇到的exception是: 1. PipeMapRed.waitOutputThreads(): subprocess failed with code N ............ 2. T ...
- hive subprocess failed with code X 的错误码对应信息
PipeMapRed.waitOutputThreads(): subprocess failed with code X ,这里code X对应的信息如下:error code 1: Operati ...
- hadoop exit code 退出码含义
原文传送门:http://www.2cto.com/database/201308/236519.html "OS error code 1: Operation not permitted ...
随机推荐
- dropwatch 网络协议栈丢包检查利器 与 火丁笔记
http://blog.yufeng.info/archives/2497 源码:http://git.fedorahosted.org/cgit/dropwatch.git http://blog. ...
- 深入GCD(四):使用串行队列实现简单的预加载
其主要思路是使用gcd创建串行队列,然后在此队列中先后执行两个任务:1.预加载一个viewController 2.将这个viewController推入代码如下:@implementation DW ...
- virtualenv 配置python3环境
virtualenv -p /usr/bin/python3 py3env source py3env/bin/activate pip install package-name
- Fragment 生命周期怎么来的?
前言 Fragment对于 Android 开发人员来说一点都不陌生,由于差点儿不论什么一款 app 都大量使用 Fragment,所以 Fragment 的生命周期相信对于大家来说应该都非常清晰.但 ...
- es中插入数据
es中插入数据 学习了:https://www.imooc.com/video/15769/0 分为指定Id和自动生成Id两种: 1,指定Id使用PUT操作 PUT http://127.0.0.1: ...
- HDU 2825 Wireless Password (AC自己主动机,DP)
pid=2825">http://acm.hdu.edu.cn/showproblem.php? pid=2825 Wireless Password Time Limit: 2000 ...
- 【转载】一些VS2013的使用技巧
1. Peek View 可以在不新建TAB的情况下快速查看.编辑一个函数的代码. 用法:在光标移至某个函数下,按下alt+F12. 然后在Peek窗口里可以继续按alt+F12.然后按ctrl+al ...
- 整理对Spark SQL的理解
Catalyst Catalyst是与Spark解耦的一个独立库,是一个impl-free的运行计划的生成和优化框架. 眼下与Spark Core还是耦合的.对此user邮件组里有人对此提出疑问,见m ...
- HTML5与Javascript 实现网页弹球游戏
终于效果图: 1. 使用html 5 的canvas 技术和javascript实现弹球游戏 总体流程图: 1.1 html5 canvas技术的使用 首先在html页面中定义画布. <canv ...
- Arduino 网络时钟client
升级! 添加了12h/24h 的开关,还有标准/ 夏令时开关!见步骤7 & 步骤8. 你是否曾想要一个和办公室时间来源全然准确的表? 这就有一个网络的办公时间server,你能够根据它并同步你 ...