Cut a Strip

题目简述:给定$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]$的最大值即可。

Expert Computation

题目简述:依次给出$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的更多相关文章

  1. HackerRank Week of Code 26

    好像这次week of code不是很难= = A int main(){ int n; int m; cin >> n >> m; cout<<(n+)/*)/) ...

  2. 【HackerRank Week of Code 31】Colliding Circles

    https://www.hackerrank.com/contests/w31/challenges/colliding-circles/problem 设E(n)为序列长度为n时的期望值. \[ \ ...

  3. hackerrank Week of Code 31

    https://www.hackerrank.com/contests/w31/challenges Beautiful Word 模拟 Accurate Sorting 检查每个数字距离原位是否都不 ...

  4. 【hackerrank week of code 26】Hard Homework

    [题目链接]:https://www.hackerrank.com/contests/w26/challenges/hard-homework/problem [题意] 给你一个式子:sin(x)+s ...

  5. hackerrank [Week of Code 33] Bonnie and Clyde

    任意门 题意:给一个图,每次询问给三个点a,b,c,问是否存在一条从a到c,一条b到c的路径除c外无交点. 双连通分量缩点建出圆方树是必须的,然后我们需要判断c是否在a到b的路径上,或者c的某个相邻的 ...

  6. 【枚举约数】HackerRank - Week of Code 26 - Satisfactory Pairs

    题意:给你一个正整数n,问你存在多少个正整数对a,b(a<b),满足条件:存在正整数x,y,使得ax+by=n. 就预处理出n以内所有数的约数,然后暴力枚举a,暴力枚举x,然后枚举n-ax的所有 ...

  7. Hadoop Exit Code 含义

    经常遇到的exception是: 1. PipeMapRed.waitOutputThreads(): subprocess failed with code N  ............ 2. T ...

  8. hive subprocess failed with code X 的错误码对应信息

    PipeMapRed.waitOutputThreads(): subprocess failed with code X ,这里code X对应的信息如下:error code 1: Operati ...

  9. hadoop exit code 退出码含义

    原文传送门:http://www.2cto.com/database/201308/236519.html "OS error code 1: Operation not permitted ...

随机推荐

  1. Spring中Bean的后置处理器

    以下内容引用自http://wiki.jikexueyuan.com/project/spring/bean-post-processors.html: Bean后置处理器 BeanPostProce ...

  2. Linux下使用vi新建文件保存文件时遇到错误:E212: Can't open file for writing

    出现E212: Can't open file for writing的问题是由于权限问题导致的,解决方法有以下思路: 1.使用root进行登录,然后再操作. 2.在使用命令时,前面加sudo. 3. ...

  3. 用systemtap来做系统性能分析和事件分析

    http://zhengheng.me/2015/02/11/systemtap-analy/

  4. MySQL 索引及其用法

    一.索引的作用 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重. 在数据 ...

  5. MySQL 为日期增加一个时间间隔

    set @dt = now(); select date_add(@dt, interval 1 day);   - 加1天 select date_add(@dt, interval 1 hour) ...

  6. BUPT复试专题—C翻转(2010)

    https://www.nowcoder.com/practice/74bdb725421c4f80b4aca7266818baf0?tpId=67&tqId=29639&rp=0&a ...

  7. BUPT 2012复试机考 4T

    题目描述 我们都学习过计算机网络,知道网络层IP协议数据包的头部格式如下: 其中IHL表示IP头的长度,单位是4字节:总长表示整个数据包的长度,单位是1字节.传输层的TCP协议数据段的头部格式如下:  ...

  8. 零售连锁行业SOA化解决方式

    零售连锁行业面临的问题 1.店铺老化.营销手段单一落后. 2.管理模式的不科学,我国零售企业在起家时候并没有一套完好的科学的管理及考评系统的存在.而且在企业的发展过程中并未学习建立.对于人才的吸引.培 ...

  9. mysql有哪几种索引

    从数据结构角度 1.  B+树索引(O(log(n))) 2.  hash索引 3.  FULLTEXT索引 4.  R-Tree索引 从物理存储角度 1. 聚集索引 2.  非聚集索引 从逻辑角度 ...

  10. Ajax_HTTP请求以及响应

    什么是HTTP请求? 就是从用户的浏览器端向服务器端发送请求 一个HTTP请求一般由四个部分组成 1.HTTP请求的方法或者动作,比如GET或者POST请求 2.请求的URL,也就是请求的地址 3.请 ...