思路:单调栈

提交:>5次

错因:单调栈写法有问题+前缀和写错

题解:

若有\(>=k\ \&\&\ <=2\times k\)的点,显然直接选他就行了。

否则,我们需要找到一个矩形(不一定只有一个),并且这个矩形只包含\(<k\)的点且总权值和\(>=2k\)。

这样,我们可以尝试去切掉他的行来不断减少他的权值和。

如果发现某一行 \(>=2k\) ,我们应该去且他而不是切剩下的矩形(剩下的可能过小)。

当然如果你切着切着发现出现了一个矩形他的权值和\(>=k\ \&\&\ <=2\times k\) ,直接输出就好。

#include<bits/stdc++.h>
#define ll long long
#define R register int
using namespace std;
namespace Luitaryi {
template<class I> inline I g(I& x) { x=0; register I f=1;
register char ch; while(!isdigit(ch=getchar())) f=ch=='-'?-1:f;
do x=x*10+(ch^48); while(isdigit(ch=getchar())); return x*=f;
} const int N=2010;
int n,k,k2,x1,x2,y1,y2;
int up[N][N],l[N],r[N],stk[N],top;
ll a[N][N],s[N][N],mx;
inline void change(int up,int dn,int l,int r) {
R sum=s[dn][r]-s[up-1][r]-s[dn][l-1]+s[up-1][l-1];
if(sum>=k&&sum<=k2) {
printf("%d %d %d %d\n",l,up,r,dn); exit(0);
}
if(sum>mx) mx=sum,x1=up,x2=dn,y1=l,y2=r;
}
inline void solve() {
for(R i=x2;i>=x1;--i) {
register ll sum=s[i][y2]-s[i-1][y2]-s[i][y1-1]+s[i-1][y1-1];
if(sum>=k&&sum<=k2) return (void) printf("%d %d %d %d\n",y1,i,y2,i);
if(sum>k2) {
for(R p=y2;p>=y1;--p) {
sum-=a[i][p];
if(sum>=k&&sum<=k2) return (void) printf("%d %d %d %d\n",y1,i,p-1,i);
}
} mx-=sum;
if(mx>=k&&mx<=k2) return (void) printf("%d %d %d %d\n",y1,i+1,y2,x2);
}
}
inline void main() { freopen("in.in","r",stdin);
g(k),k2=k<<1,g(n); for(R i=1;i<=n;++i) for(R j=1;j<=n;++j) {
s[i][j]=g(a[i][j])+s[i][j-1]; if(a[i][j]>=k&&a[i][j]<=k2)
return (void)printf("%d %d %d %d\n",i,j,i,j);
} for(R i=1;i<=n;++i) for(R j=1;j<=n;++j) s[i][j]+=s[i-1][j];
for(R i=1;i<=n;++i) {
for(R j=1;j<=n;++j) if(a[i][j]<k) up[i][j]=up[i-1][j]+1;
stk[top=1]=0,up[i][0]=-1; for(R j=1;j<=n;++j) {
while(top&&up[i][stk[top]]>=up[i][j]) --top;
l[j]=stk[top]+1,stk[++top]=j;
} stk[top=1]=n+1,up[i][n+1]=-1;
for(R j=n;j;--j) {
while(top&&up[i][stk[top]]>=up[i][j]) --top;
r[j]=stk[top]-1,stk[++top]=j;
if(up[i][j]) change(i-up[i][j]+1,i,l[j],r[j]);
}
}
if(mx<k) return (void) puts("NIE"); solve();
}
} signed main() {Luitaryi::main(); return 0;}

2019.09.03

66

P3474 [POI2008]KUP-Plot purchase的更多相关文章

  1. 1127: [POI2008]KUP

    1127: [POI2008]KUP https://lydsy.com/JudgeOnline/problem.php?id=1127 分析: 如果存在一个点大于等于k,小于等于2k的话,直接输出. ...

  2. 题解 【POI2008】KUP-Plot purchase

    题面 先把题目意思讲一下吧: 给一个 \(n*n\) 的地图,每个格子有一个价格,找一个矩形区域,使其价格总和位于\([k,2k]\). 那么首先,可以想到,如果\(a[i][j]\)(格子的价格,下 ...

  3. [BZOJ1127][POI2008] KUP子矩阵

    Description 给一个n*n的地图,每个格子有一个价格,找一个矩形区域,使其价格总和位于[k,2k] Input 输入k n(n<2000)和一个n*n的地图 Output 输出矩形的左 ...

  4. bzoj1127: [POI2008]KUP

    Description 给一个n*n的地图,每个格子有一个价格,找一个矩形区域,使其价格总和位于[k,2k] Input 输入k n(n<2000)和一个n*n的地图 Output 输出矩形的左 ...

  5. bzoj1127[POI2008]KUP 悬线法

    Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 485  Solved: 174[Submit][Status][D ...

  6. 解题:POI 2008 Plot purchase

    题面 原来看过然后没做,结果板板把这道题改了改考掉了,血亏=.= 首先看看有没有符合条件的点.如果没有开始寻找解,先把所有的大于$2*k$的点设为坏点,然后求最大子矩形,只要一个最大子矩形的权值和超过 ...

  7. [BZOJ] 1127: [POI2008]KUP

    似曾相识的感觉 考虑另一个判断问题,给定一个k,问这个k是否可行 存在矩形和\(sum>2k\),则该矩阵不对判定做出贡献 存在矩形和\(sum\in [k,2k]\),则我们找到了一个解 于是 ...

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

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

  9. [POI2008]KUP

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

随机推荐

  1. 解决maven项目无法读取src/main/java目录下面的配置文件问题

    我们在用Mybatis去操作底层数据库的时候,需要用到xml配置文件,一般我们是把配置文件和dao放置在同一层目录. 但是在用idea操作maven项目的时候,我们可能会遇到无法读取到dao对应的ma ...

  2. 十一、三星平台framebuffer驱动

    和总线设备驱动模型类似,framebuffer分为核心层.驱动层和设备层. 核心层:就是上一章分析的fbmem.c文件 驱动层(控制器层):一般由芯片原厂提供,实现了LCD控制器通用的操作接口和配置接 ...

  3. 13_日期时间、Math、枚举

    日期时间.Math.枚举 日期时间 计算机如何表示时间? GMT时间指格林尼治所在地的标准时间,也称为时间协调时(UTC),其他地区的时间都是相对于GMT时间的偏移.   北京位于东八区 = UTC ...

  4. MongoDB增删改

    一.数据库操作 显示现有的数据库,命令:show dbs 或者 databases; 示当前使用的数据库,命令:db 切换当前使用的数据库,命令:use 数据库名称 删除数据库,命令:db.dropD ...

  5. hdu 4745 two Rabits

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4745 题解:首先要抽象出题目要求的是啥.首先对于环的问题, 我们可以倍增成链,然后环的所有情况可以通过链来 ...

  6. GDB数据库SQL操作平台

    GDB数据库SQL操作平台 开发本软件的初衷:由于计算数据库要素层属性的时候,涉及到要计算多个字段,或者要根据代码计算名称,得一个一个的筛选并计算,过程比较繁琐,于是就想能不能通过像处理SQLServ ...

  7. OSI的七层网络模型

    一.概念七层模型,亦称OSI(Open System Interconnection)参考模型,是参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系.它是一个七层的.抽象 ...

  8. nginx和PHP之间的通信

    如果程序员a和B在windows上开发代码,它们可以被分离到不同的服务器,因为nginx和PHP之间的通信是基于TCP fastcgi协议的我们可以在程序员的windows pc上安装nginx,使用 ...

  9. Postman如何进行参数化

    前言 Postman作为一款接口测试工具,受到了非常多的开发工程师的拥护. 那么做为测试,了解Postman这款工具就成了必要的了. 这篇文章就是为了解决Postman怎么进行参数化的. 全局变量 全 ...

  10. Trie 树(字典树)

    [动画]看动画轻松理解「Trie树」 读音 Trie这个名字取自“retrieval”,检索,因为Trie可以只用一个前缀便可以在一部字典中找到想要的单词. 虽然发音与「Tree」一致,但为了将这种 ...