【BZOJ5085】最大

Description

给你一个n×m的矩形,要你找一个子矩形,价值为左上角左下角右上角右下角这四个数的最小值,要你最大化矩形的价值。

Input

第一行两个数n,m,接下来n行每行m个数,用来描述矩形
n, m ≤ 1000

Output

输出一个数表示答案

Sample Input

2 2
1 2
3 4

Sample Output

1

题解:我们先将所有数排序,然后从大到小扔到矩形中。每当我们加入一个点时,我们枚举它能和同行中的所有点形成的点对。比如有一行有两个点(x1,y1)和(x1,y2),那么就形成了一个点对(y1,y2)。那么一旦某个点对出现了两次,则说明出现了一个矩形。那么我们就不断扔,直到出现某个重复的点对为止,时间复杂度$O(n^2log_n)$。

然而似乎有个结论,答案一定在最大的4*n个点之中。那么取出这些点暴力即可。如果用nth_element+如上做法的话,时间复杂度可以从$O(16*n^2)$优化到$O(n^2)$(然而并不想卡这个常数)。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int n,m,tot;
struct node
{
int x,y,val;
}p[1000010];
int map[1010][1010];
vector<int> v[1010];
vector<int>::iterator it;
inline int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-') f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+(gc^'0'),gc=getchar();
return ret*f;
}
bool cmp(const node &a,const node &b)
{
return a.val>b.val;
}
int main()
{
n=rd(),m=rd();
int i,j;
for(i=1;i<=n;i++) for(j=1;j<=m;j++) p[++tot].x=i,p[tot].y=j,p[tot].val=rd();
sort(p+1,p+n*m+1,cmp);
for(i=1;i<=tot;i++)
{
for(it=v[p[i].x].begin();it!=v[p[i].x].end();it++)
{
if(map[p[i].y][*it])
{
printf("%d",p[i].val);
return 0;
}
map[p[i].y][*it]=map[*it][p[i].y]=1;
}
v[p[i].x].push_back(p[i].y);
}
}

【BZOJ5085】最大 鸽巢原理的更多相关文章

  1. POJ 3370. Halloween treats 抽屉原理 / 鸽巢原理

    Halloween treats Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7644   Accepted: 2798 ...

  2. POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理

    Find a multiple Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7192   Accepted: 3138   ...

  3. cf319.B. Modulo Sum(dp && 鸽巢原理 && 同余模)

    B. Modulo Sum time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  4. poj 2356 Find a multiple(鸽巢原理)

    Description The input contains N natural (i.e. positive integer) numbers ( N <= ). Each of that n ...

  5. poj2356 Find a multiple(抽屉原理|鸽巢原理)

    /* 引用过来的 题意: 给出N个数,问其中是否存在M个数使其满足M个数的和是N的倍数,如果有多组解, 随意输出一组即可.若不存在,输出 0. 题解: 首先必须声明的一点是本题是一定是有解的.原理根据 ...

  6. NYOJ 417 死神来了 鸽巢原理

    死神来了 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 有一天,王小子在遨游世界时,遇到了一场自然灾害.一个人孤独的在一个岛上,没有吃的没有喝的.在他饥寒交迫将要死亡时 ...

  7. HDU 1005 Number Sequence【多解,暴力打表,鸽巢原理】

    Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  8. Codeforces.618F.Double Knapsack(构造 鸽巢原理)

    题目链接 \(Description\) 给定两个大小为\(n\)的可重集合\(A,B\),集合中的元素都在\([1,n]\)内.你需要从这两个集合中各选一个非空子集,使它们的和相等.输出方案. \( ...

  9. Find the duplicate Number (鸽巢原理) leetcode java

    问题描述: Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive ...

  10. [BZOJ4722]由乃[鸽巢原理+bitset+倍增]

    题意 给定长为 \(n\) 序列 \(a\) ,要求支持两种操作: \(1.\) 询问在一个区间 \([l,r]\) 中,是否能够选出两个交集为空的集合 $ \rm X ,Y$, 使得 \(\sum_ ...

随机推荐

  1. elasticsearch安装与使用(6)-- Logstash安装与配置

    由于elasticsearch的search guard 不支持 elasticsearch的jdbc,所以如果安装了search guard认证插件之后,基本上jdbc就废了,所以我们需要用到log ...

  2. sed删除空行和开头的空格和tab键

    [root@ob1 scripts]# cat -An tt2.txt      1 jeyry$     2      ^I$     3 jfdkjfdjk$     4 ^Ikjfdkjfdkj ...

  3. iOS边练边学--九宫格布局

    一.介绍一下ViewController中的结构 二.九宫格设计思路 三.代码实现 // 点击增加按钮 - (void)add:(UIButton *)btn { // 定义一行中的列数(个数) NS ...

  4. MySQL的最大连接数

    mysql的最大连接数默认是100, 这个数值对于并发连接很多的数据库应用是远远不够的,当连接请求大于默认连接数后,就会出现无法连接数据库的错误,因此我们需要把它适当调大一些 设置新的MySQL最大连 ...

  5. js学习笔记20----addClass,removeClass函数封装

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. 在Linux环境下mysql的root密码忘记解决方法

    MySQL密码的恢复方法之一 .首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库. 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的 状态下 ...

  7. 12款优秀 jQuery Ajax 分页插件和教程

    12款优秀 jQuery Ajax 分页插件和教程 在这篇文章中,我为大家收集了12个基于 jQuery 框架的 Ajax 分页插件,这些插件都提供了详细的使用教程和演示.Ajax 技术的出现使得 W ...

  8. Linux make语法补充

    "-"表示此条命令出错,make也会继续执行后续的命令.如:"-rm main.o" 内置变量$@表示生成目标 内置变量$^表示所有依赖 内置变量$<表示 ...

  9. JVM内存模型 小小结

    可以看一下我的另一篇总结 JVM运行时数据区与JVM堆内存模型小结 推荐一篇文章,尚学堂的 Java内存模型深度解读 . 不方便全文转载,就摘录下吧. 以往的认知都是以基本类型.引用类型.常量.方法等 ...

  10. perl File::Spec 模块

    File::Spec 模块提供了很多的功能,这里只列举几个常用的函数 rel2abs : 返回一个文件的绝对路径, 常见用法,返回当前运行的perl脚本的绝对路径 代码示例: my $prog = F ...