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 ...
随机推荐
- 【String】String.format(format,args...)的使用解析
String.format(format,args...)的使用解析 使用kotlin 中使用示例 ================================================== ...
- ViewPager 无限循环遇到的坑 viewpager.setOffscreenPageLimit(2);
viewpager.setOffscreenPageLimit(limit);这个方法,是表示viewpage除了当前显示的页面外,左右个预加载的页面个数,也就是 为limit=2时表示当前一共加载了 ...
- Python机器学习--降维
主成分分析(PCA) 测试 # -*- coding: utf-8 -*- """ Created on Thu Aug 31 14:21:51 2017 @author ...
- ReactNavtive框架教程(3)
原文:http://www.raywenderlich.com/99473/introducing-react-native-building-apps-javascript 注意:全部图片放在了百度 ...
- MongoDB副本集的原理,搭建
介绍: mongodb副本集即客户端连接到整个副本集,不关心具体哪一台机器是否挂掉.主服务器负责整个副本集的读写,副本集定期同步数据备份,一旦主节点挂掉,副本节点就会选举一个新的主服务器,这一切对于应 ...
- android-problem——remount of /system failed: Read-only file system
adb remount后仍旧不能对system进行读写.需要进行adb disable-verity 在Android6.0 (Android M)userdebug版本上(eng版本不存在该问题), ...
- 仿htc sense的弹性listView!
demo下载:http://pan.baidu.com/s/1ntoICdV 前一段时间换了htc m7之后,对htc的sense ui有不错的印象.特别是它的listview十分有个性.提供弹性的o ...
- C# Backgroundworker(后台线程)的使用
namespace BackgroundWorkderPauseSample { public partial class MainForm : Form { BackgroundWorker wor ...
- run as maven test报错解决办法
eclipse中使用maven插件的时候,运行run as maven build的时候报错 -Dmaven.multiModuleProjectDirectory system propery is ...
- appium 控件定位
转自:http://www.2cto.com/kf/201410/340345.html AppiumDriver的各种findElement方法的尝试,尝试的目标应用是SDK自带的Notepad应用 ...