Description
给一个\(n\times n\)的地图,每个格子有一个价格,找一个矩形区域,使其价格总和位于[k,2k]

Input
输入k n(n<2000)和一个\(n\times n\)的地图

Output
输出矩形的左上和右下的列-行坐标或NIE

Sample Input 1
4 3
1 1 1
1 9 1
1 1 1

Sample Output 1
NIE

Sample Input 2
8 4
1 2 1 3
25 1 2 1
4 20 3 3
3 30 12 2

Sample Output 2
2 1 4 2

HINT
1<=k<=10^9 每个价格都是不大于2$\times$10^9的非负整数


首先如果单点有就直接输出,否则的话,我们把<k的点给标记一下,那么我们可以发现,答案必然是标记的点所构成的极大子矩阵中的子矩阵。所以我们对标记的点求一次极大子矩阵,然后看情况不断对矩阵删减即可。如果不会极大子矩阵的话可以参考该国家队论文王知昆--浅谈用极大化思想解决最大子矩形问题

/*program from Wolfycz*/
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define inf 0x7f7f7f7f
using namespace std;
typedef long long ll;
typedef unsigned int ui;
typedef unsigned long long ull;
inline int read(){int x=0,f=1;char ch=getchar();for (;ch<'0'||ch>'9';ch=getchar())  if (ch=='-')    f=-1;for (;ch>='0'&&ch<='9';ch=getchar())    x=(x<<1)+(x<<3)+ch-'0';return x*f;
}
inline void print(int x){if (x>=10)     print(x/10);putchar(x%10+'0');
}
const int N=2e3;
int map[N+10][N+10],L[N+10][N+10],R[N+10][N+10],l[N+10][N+10],r[N+10][N+10],h[N+10][N+10];
ll sum[N+10][N+10];
int k,n;
ll get(int x1,int y1,int x2,int y2){return sum[x2][y2]-sum[x1-1][y2]-sum[x2][y1-1]+sum[x1-1][y1-1];}
void write(int x1,int y1,int x2,int y2){while (get(x1,y1,x2,y2)>2*k){if (get(x1+1,y1,x2,y2>=k))  x1++;else    if (get(x1,y1,x2-1,y2)>=k)  x2--;else    if (get(x1,y1+1,x2,y2)>=k)  y1++;else    if (get(x1,y1,x2,y2-1)>=k)  y2--;}printf("%d %d %d %d\n",y1,x1,y2,x2);exit(0);
}
int main(){k=read(),n=read();for (int i=1;i<=n;i++){for (int j=1;j<=n;j++){map[i][j]=read();if (map[i][j]>=k&&map[i][j]<=2*k){printf("%d %d %d %d\n",j,i,j,i);return 0;}sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+map[i][j];}}for (int i=1;i<=n;i++){int nowl=0;for (int j=1;j<=n;j++)  map[i][j]<k?L[i][j]=nowl+1:nowl=j;}for (int i=1;i<=n;i++){int nowr=n+1;for (int j=n;j>=1;j--)  map[i][j]<k?R[i][j]=nowr-1:nowr=j;}for (int i=1;i<=n;i++){for (int j=1;j<=n;j++){if (map[i][j]>2*k)  continue;if (i==1||map[i-1][j]>2*k)  h[i][j]=1,l[i][j]=L[i][j],r[i][j]=R[i][j];else    h[i][j]=h[i-1][j]+1,l[i][j]=max(l[i-1][j],L[i][j]),r[i][j]=min(r[i-1][j],R[i][j]);}}for (int i=1;i<=n;i++){for (int j=1;j<=n;j++){if (map[i][j]<=k<<1){int x1=i-h[i][j]+1,y1=l[i][j],x2=i,y2=r[i][j];if (get(x1,y1,x2,y2)>=k)    write(x1,y1,x2,y2);}}}printf("NIE\n");return 0;
}

转载于:https://www.cnblogs.com/Wolfycz/p/9035688.html

[POI2008]KUP相关推荐

  1. bzoj1127: [POI2008]KUP

    1127: [POI2008]KUP Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special Judge Submit: 568  Solved: 2 ...

  2. bzoj 1127 [POI2008]KUP——思路(悬线法)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1127 大于2*K的视为不能选的"坏点".有单个格子满足的就直接输出. 剩 ...

  3. BZOJ 1127: [POI2008]KUP 最大子矩阵

    时空隧道 对于这个矩阵如果其中某一个元素满足要求直接输出即可-否则就把大于2k的点都视为不可选择的点-找出所有的极大子矩阵-如果存在一个极大子矩阵符合要求就直接输出-否则就寻找大于2k的极大子矩阵然后 ...

  4. BZOJ 1127 [POI2008]KUP 最大子矩阵

    题意:链接 方法:最大子矩阵 解析: 先考虑1*n的情况,如果有在目标区间内的直接输出. 否则找是否存在一个区间即可. 然后能否推广呢? 可以的. 如果元素有在目标区间的值的话,直接输出即可. 否则的 ...

  5. bzoj1127 [POI2008]KUP

    Description 给一个n*n的地图,每个格子有一个价格,找一个矩形区域,使其价格总和位于[k,2k] n<2000 1<=k<=10^9 每个价格都是不大于2*10^9的非负 ...

  6. 【BZOJ-1127】KUP 悬线法 + 贪心

    1127: [POI2008]KUP Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special Judge Submit: 317  Solved: 1 ...

  7. 题解 - [POI2008]KUP-Plot purchase

    [POI2008]KUP−Plotpurchase\mathrm{ [POI2008]\ KUP-Plot purchase}[POI2008] KUP−Plotpurchase 题解 题目意思 [P ...

  8. bzoj1131[POI2008]Sta*

    bzoj1131[POI2008]Sta 题意: 给出一个n个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大.n≤1000000. 题解: 两次dfs.第一次dfs维护子树的大小.节点 ...

  9. 洛谷 P3469 [POI2008]BLO-Blockade (Tarjan,割点)

    P3469 [POI2008]BLO-Blockade https://www.luogu.org/problem/P3469 题目描述 There are exactly nn towns in B ...

最新文章

  1. JZOJ 3.10 1540——岛屿
  2. nyoj116士兵杀敌2
  3. 【Hadoop Summit Tokyo 2016】基于Apache Spark的数据科学
  4. 面积积分_新市民随迁子女积分入学指标调整 房产建筑面积每平方米积1分
  5. word中如何替换一些特殊符号
  6. 万恶的流氓首页~~我要干掉你
  7. eXosip事件总结
  8. iOS 相机开发总结
  9. MATLAB拟合函数使用说明
  10. C语言计算BMI值,一看就会
  11. 没有授权,Android App 也能获取你的权限?!
  12. cfdpost导出图片_科学网—去除 cfd post 输出eps文件中的莫名其妙的点 - 姚程的博文...
  13. matlab实现nc文件批量转tif文件
  14. mxgraph进阶(三)Web绘图——mxGraph项目实战(精华篇)
  15. 14寸笔记本 2k linux,HUAWEI 华为 MateBook 14 Linux版 14英寸笔记本电脑(i7-8565U、8G、512G、MX250、2K、100%sRGB)...
  16. idea的去除转义的复制粘贴
  17. Bochs 调试指令
  18. 怪物农场2修改日志3 - 年轮
  19. vue选择图片的几种方式
  20. JAVA环境搭建(win10)

热门文章

  1. SQL Server 数据库中添加文件组和数据文件
  2. AWS部署大淘客CMS
  3. python批量合并excel文件,后缀名为xls
  4. 股票入门浅学20210721
  5. 跑深度模型的显卡_近乎白嫖!我的深度学习云GPU平台!便宜、好用、速来!
  6. 基于区块链的二维码门禁系统成品演示视频
  7. 从Hadder看蛋白质分子中的加氢算法
  8. R语言入门(1)时间序列分析
  9. 读书笔记:少有人走的路
  10. 小龙女的真面目和杨过跳崖真相--其实不想走!