题目链接

题目链接

题解

题面上面很明显的提示了需要严格\(O(n^3)\)的算法。

先考虑一个过不了的做法,枚举右下角的\((x,y)\),然后二分矩形面积,枚举其中一边,则复杂度是\(O(n^3 \log n^2)\)的。

考虑另外一个做法,同样是枚举右下角\((x,y)\),然后枚举一边长度,显然现在只需要知道左边最远能延伸到哪,这个玩意显然是有单调性的,那么尺取一下,套个单调队列判断即可。

注意细节。

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. namespace io {
  4. char buf[1<<21], *p1 = buf, *p2 = buf;
  5. inline char gc() {
  6. if(p1 != p2) return *p1++;
  7. p1 = buf;
  8. p2 = p1 + fread(buf, 1, 1 << 21, stdin);
  9. return p1 == p2 ? EOF : *p1++;
  10. }
  11. #define G gc
  12. #ifndef ONLINE_JUDGE
  13. #undef G
  14. #define G getchar
  15. #endif
  16. template<class I>
  17. inline void read(I &x) {
  18. x = 0; I f = 1; char c = G();
  19. while(c < '0' || c > '9') {if(c == '-') f = -1; c = G(); }
  20. while(c >= '0' && c <= '9') {x = x * 10 + c - '0'; c = G(); }
  21. x *= f;
  22. }
  23. template<class I>
  24. inline void write(I x) {
  25. if(x == 0) {putchar('0'); return;}
  26. I tmp = x > 0 ? x : -x;
  27. if(x < 0) putchar('-');
  28. int cnt = 0;
  29. while(tmp > 0) {
  30. buf[cnt++] = tmp % 10 + '0';
  31. tmp /= 10;
  32. }
  33. while(cnt > 0) putchar(buf[--cnt]);
  34. }
  35. #define in(x) read(x)
  36. #define outn(x) write(x), putchar('\n')
  37. #define out(x) write(x), putchar(' ')
  38. } using namespace io;
  39. #define ll long long
  40. const int N = 510;
  41. struct Node {
  42. int x, y, v;
  43. };
  44. int T, n, m;
  45. int a[N][N], mx[N], mn[N];
  46. int qmin[N], qmax[N];
  47. int main() {
  48. read(T);
  49. while(T--) {
  50. int ans = 0;
  51. read(n); read(m);
  52. for(int i = 1; i <= n; ++i) for(int j = 1; j <= n; ++j) read(a[i][j]);
  53. for(int l = 1; l <= n; ++l) {
  54. for(int i = 1; i <= n; ++i) mn[i] = 1e9, mx[i] = 0;
  55. for(int r = l; r <= n; ++r) {
  56. for(int i = 1; i <= n; ++i) {
  57. mn[i] = min(mn[i], a[r][i]);
  58. mx[i] = max(mx[i], a[r][i]);
  59. }
  60. int cur = 1, l0 = 1, l1 = 1, r0 = 0, r1 = 0;
  61. for(int i = 1; i <= n; ++i) {
  62. while(l0 <= r0 && mn[qmin[r0]] > mn[i]) --r0;
  63. while(l1 <= r1 && mx[qmax[r1]] < mx[i]) --r1;
  64. qmin[++r0] = i; qmax[++r1] = i;
  65. while(l0 <= r0 && l1 <= r1 && cur <= i && mx[qmax[l1]] - mn[qmin[l0]] > m) {
  66. ++cur;
  67. while(l0 <= r0 && qmin[l0] < cur) ++l0;
  68. while(l1 <= r1 && qmax[l1] < cur) ++l1;
  69. }
  70. if(mx[qmax[l1]] - mn[qmin[l0]] <= m) ans = max(ans, (r - l + 1) * (i - cur + 1));
  71. }
  72. }
  73. }
  74. outn(ans);
  75. }
  76. }

2019牛客多校第三场 F.Planting Trees的更多相关文章

  1. 2019牛客多校第三场F Planting Trees(单调队列)题解

    题意: 求最大矩阵面积,要求矩阵内数字满足\(max - min < m\) 思路: 枚举上下长度,在枚举的时候可以求出每一列的最大最小值\(cmax,cmin\),这样问题就变成了求一行数,要 ...

  2. 牛客多校第三场 F Planting Trees

    牛客多校第三场 F Planting Trees 题意: 求矩阵内最大值减最小值大于k的最大子矩阵的面积 题解: 矩阵压缩的技巧 因为对于我们有用的信息只有这个矩阵内的最大值和最小值 所以我们可以将一 ...

  3. 牛客多校第三场F Planting Trees 单调栈

    Planting Trees 题意 给出一个矩阵,求最大矩阵面积满足该矩阵中任2元素的绝对值之差小于等于M T<1000) (n<500)但是题目明示单组(n*3)可过 分析 又是矩阵问题 ...

  4. 2019牛客多校第八场 F题 Flowers 计算几何+线段树

    2019牛客多校第八场 F题 Flowers 先枚举出三角形内部的点D. 下面所说的旋转没有指明逆时针还是顺时针则是指逆时针旋转. 固定内部点的答案的获取 anti(A)anti(A)anti(A)或 ...

  5. 2019 牛客暑期多校 第三场 F Planting Trees (单调队列+尺取)

    题目:https://ac.nowcoder.com/acm/contest/883/F 题意:求一个矩阵最大面积,这个矩阵的要求是矩阵内最小值与最大值差值<=m 思路:首先我们仔细观察范围,我 ...

  6. 2019年牛客多校第三场 F题Planting Trees(单调队列)

    题目链接 传送门 题意 给你一个\(n\times n\)的矩形,要你求出一个面积最大的矩形使得这个矩形内的最大值减最小值小于等于\(M\). 思路 单调队列滚动窗口. 比赛的时候我的想法是先枚举长度 ...

  7. 2019牛客多校第三场D BigInteger——基础数论

    题意: 用  $A(n)$ 表示第 $n$ 个只由1组成分整数,现给定一个素数 $p$,求满足 $1 \leq i\leq n, 1 \leq j \leq m, A(i^j) \equiv 0(mo ...

  8. [2019牛客多校第三场][G. Removing Stones]

    题目链接:https://ac.nowcoder.com/acm/contest/883/G 题目大意:有\(n\)堆石头,每堆有\(a_i\)个,每次可以选其中两堆非零的石堆,各取走一个石子,当所有 ...

  9. [题解]Magic Line-计算几何(2019牛客多校第三场H题)

    题目链接:https://ac.nowcoder.com/acm/contest/883/H 题意: 给你偶数个点的坐标,找出一条直线将这n个点分成数量相等的两部分 并在这条直线上取不同的两个点,表示 ...

随机推荐

  1. Postman系列三:Postman中post接口实战(上传文件、json请求)

    一:接口测试过程中GET请求与POST请求的主要区别 从开发角度我们看get与post的主要区别是:1.Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据:2.Get安全性比Post低 ...

  2. POJ 1458 Common Subsequence(最长公共子序列)

    题目链接Time Limit: 1000MS Memory Limit: 10000K Total Submissions: Accepted: Description A subsequence o ...

  3. BugkuCTF~Misc~WriteUp

    1.签到 get flag: Qftm{You should sign in} 2.这是一张单纯的图片 查看图片十六进制 提去特殊字符串进行解码 get flag: key{you are right ...

  4. 深度解析qml引擎---(1)Qml文件加载

                                                                        "美的事物是永恒的喜悦" --- 济慈    ...

  5. ubuntu16.04+cuda9.0_cudnn7.5+tensorflow-gpu==1.12.0

    1.查找可用的tensorflow源,该命令运行后终端会输出所有可用的源 anaconda search -t conda tensorflow 2.这里name是上一步中输出源的tensorflow ...

  6. Qt 自定义QTabWidget

    思路: QTabWidget的特点:点击不同的选项卡显示不同的窗口.可以将QTabWidget分成两部分: (1).选项卡:点击时要知道点击的是哪个选项.则需要将选项卡和窗口的信息存起来,点击时去这个 ...

  7. mysql5.5免安装版配置教程

    1. 下载免安装版 ,解压缩 2. 配置MYSQL的环境变量 新增系统变量MYSQL_HOME:安装目录 在PATH变量的最后面添加: ;%MYSQL_HOME%\bin(注意前面的:) 3. 打开文 ...

  8. GC收集器

    新生代收集器 Serial New 单线程收集器,工作时必须暂停其他线程: 简单高效,没有线程交互开销: 基于复制算法: Parallel New 对Serial的改进,多线程: CPU数量<4 ...

  9. UnityShader - 渲染管线

    定义: 显卡内部处理图像信号的并行处理单元,也称为渲染流水线 发生位置: CPU和GPU 渲染机理: 将图像所具备的图形信息(顶点.纹理.材质.摄像机位置等)经过一系列阶段的处理,最终转换为屏幕上的图 ...

  10. Unity3D 跨平台原理

    Unity3D的跨平台原理核心在于对指令集CIL(通用中间语言)的应用. 机理 首先需要知道,Unity中的Mono是基于 通用语言架构(Common Language Infrastructure, ...