题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=5085

  这道题我们可以先二分答案,然后转化为判定是否有四角权值>=mid的矩形。

  我们可以发现,若4个点可以构成矩形,那么这四个点一定两两在同一行,同一列。

  于是我们可以把每一行的合法点处理出来,在里面枚举点对。若有一个点对出现了两次,那么就说明在上面的某一行的相同列有两个合法点,即能构成矩形。

  因为找到两对相同的合法点对就可以反回结果,而合法点对的规模是$ O(m^2) $的,因此总时间复杂度$ O(m^2\log(n)) $。

·  (然而我因为读入写错tle了好几发。。。qwq)

  代码:

  1. #include<cstdio>
  2. #include<cmath>
  3. #include<cstdlib>
  4. #include<cstring>
  5. #include<ctime>
  6. #include<iostream>
  7. #include<algorithm>
  8. #include<queue>
  9. #include<vector>
  10. #include<map>
  11. #define ll long long
  12. #define ull unsigned long long
  13. #define max(a,b) (a>b?a:b)
  14. #define min(a,b) (a<b?a:b)
  15. #define lowbit(x) (x& -x)
  16. #define mod 10000007
  17. #define inf 0x3f3f3f3f
  18. #define eps 1e-10
  19. #define maxn 1010
  20. inline char nc(){
  21. static char buf[],*p1=buf,*p2=buf;
  22. return p1==p2&&(p2=(p1=buf)+fread(buf,,,stdin),p1==p2)?EOF:*p1++;
  23. }
  24. inline ll read(){ll tmp=; char c=nc(),f=; for(;c<''||''<c;c=nc())if(c=='-')f=-; for(;''<=c&&c<='';c=nc())tmp=(tmp<<)+(tmp<<)+c-''; return tmp*f;}
  25. inline ll power(ll a,ll b){ll ans=; for(;b;b>>=){if(b&)ans=ans*a%mod; a=a*a%mod;} return ans;}
  26. inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
  27. inline void swap(int &a,int &b){int tmp=a; a=b; b=tmp;}
  28. using namespace std;
  29. int a[maxn][maxn],vis[maxn][maxn];
  30. int x[maxn];
  31. int n,m;
  32. int check(int mid)
  33. {
  34. memset(vis,,sizeof(vis));
  35. for(int i=;i<=n;i++){
  36. int tot=;
  37. for(int j=;j<=m;j++)
  38. if(a[i][j]>=mid)x[++tot]=j;
  39. for(int j=;j<tot;j++)
  40. for(int k=j+;k<=tot;k++)
  41. if(vis[x[j]][x[k]])return ;
  42. else vis[x[j]][x[k]]=;
  43. }
  44. return ;
  45. }
  46. int main()
  47. {
  48. n=read(); m=read();
  49. int l=inf,r=-inf;
  50. for(int i=;i<=n;i++)
  51. for(int j=;j<=m;j++)
  52. a[i][j]=read(),l=min(l,a[i][j]),r=max(r,a[i][j]);
  53. while(l<r){
  54. int mid=(l+r+)>>;
  55. if(check(mid))l=mid;
  56. else r=mid-;
  57. }
  58. printf("%d\n",l);
  59. }

bzoj5085

  Tips:听说找到权值最大的前4n个点直接爆枚就行了?然而我不会证。

【bzoj5085】最大(二分+乱搞)的更多相关文章

  1. [NOIP模拟赛][并没有用二分][乱搞AC]

    圆圈舞蹈 [问题描述] 熊大妈的奶牛在时针的带领下,围成了一个圆圈跳舞.由于没有严格的教育,奶牛们之间的间隔不一致. 奶牛想知道两只最远的奶牛到底隔了多远.奶牛A到B的距离为A顺时针走和逆时针走,到达 ...

  2. Codeforces 1077E (二分乱搞或者dp)

    题意:给你一个数组,可以从中选区若干种元素,但每种元素选区的个数前一种必须是后一种的2倍,选区的任意2种元素不能相同,问可以选取最多的元素个数是多少? 思路1(乱搞):记录一下每种元素的个数,然后暴力 ...

  3. bzoj1992鬼谷子的钱袋(二分乱搞 二进制)

    1192: [HNOI2006]鬼谷子的钱袋 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3223  Solved: 2333 Descriptio ...

  4. [luoguP2862] [USACO06JAN]把牛Corral the Cows(二分 + 乱搞)

    传送门 可以二分边长 然后另开两个数组,把x从小到大排序,把y从小到大排序 枚举x,可以得到正方形的长 枚举y,看看从这个y开始,往上能够到达多少个点,可以用类似队列来搞 其实发现算法的本质之后,x可 ...

  5. SCU 4437 Carries(二分乱搞)题解

    题意:问任意两对ai,aj相加的总进位数为多少.比如5,6,95分为(5,6)(5,95)(6,95),进位数 = 1 + 2 + 2 = 5 思路:显然暴力是会超时的.我们可以知道总进位数等于每一位 ...

  6. 【BZOJ-4692】Beautiful Spacing 二分答案 + 乱搞(DP?)

    4692: Beautiful Spacing Time Limit: 15 Sec  Memory Limit: 128 MBSubmit: 46  Solved: 21[Submit][Statu ...

  7. “盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛题解&&源码【A,水,B,水,C,水,D,快速幂,E,优先队列,F,暴力,G,贪心+排序,H,STL乱搞,I,尼姆博弈,J,差分dp,K,二分+排序,L,矩阵快速幂,M,线段树区间更新+Lazy思想,N,超级快速幂+扩展欧里几德,O,BFS】

    黑白图像直方图 发布时间: 2017年7月9日 18:30   最后更新: 2017年7月10日 21:08   时间限制: 1000ms   内存限制: 128M 描述 在一个矩形的灰度图像上,每个 ...

  8. P3105 [USACO14OPEN]公平的摄影(正解是乱搞,我却二分了)(+二分答案总结)

    照例化简题意: 给定一个01区间,可以把0改成1,问其中最长的01数量相等的区间长度. 额很容易想到前缀和,把w弄成1,h弄成-1,然后求前缀和,然后乱搞就行了. 但是一直不太会乱搞的我却直接想到了二 ...

  9. Bzoj 1926: [Sdoi2010]粟粟的书架(二分答案+乱搞+主席树)

    1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec Memory Limit: 552 MB Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱 ...

随机推荐

  1. Gradle5.x打jar包上传maven仓库

    1.上传本地仓库 1.1 build.gradle 项目设置 plugins { id 'java' id 'maven' //引入maven插件 } group 'com.inkyi' //包名 v ...

  2. PHP 如何成长 (收藏自:http://www.cnblogs.com/try-better-tomorrow/p/6964036.html)

    原文题目为<php程序员学C/C++>,不过我觉得说是提升自己比较合适. 身边有几个做PHP开发的朋友,因为面试,也接触到不少的PHP工程师,他们常疑虑自己将来在技术上的成长与发展,我常给 ...

  3. rest规范 ; restful 风格; gradel介绍 ; idea安装 ;

    [说明]上午整理了一下心情:下午继续开始任务,了解了restful,知道了那个牛人的博士论文,下载了管理工具gradle,并且部署了环境:晚上安装了idea继承环境并且建了一个简单的gradle项目( ...

  4. EasyNVR对接EasyCloud视频云平台进行云端录像

    EasyCloud视频云平台是一套能够接入各种类型流,进行统一的设备管理.直播.录像.回放的视频平台,同时,EasyCloud视频云平台集成了云端运维功能,在云端就可以直接维护和控制各个现场的软件运行 ...

  5. 调用第三方物流公司API即时查询物流信息

    主要是利用快递鸟提供的物流服务,通过对接快递鸟的API,调用即时查询接口,获取物流信息. 这里采用java语言,调用快递鸟的接口为例.步骤如下: 1.首先,得去快递鸟的官方网站注册一个账号并进行实名认 ...

  6. python系列九:python3迭代器和生成器

    #!/usr/bin/python import sys '''迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退.迭代器有 ...

  7. JavaScript遍历IP段内所有IP

    思路:将两个IP转换为数字进行比较,小的那个慢慢加一,直到变成大的那个IP所转换的数字,将这其中的数字再转换为IP地址即为IP段内所有的IP. //IP转数字 function ip2int(ip) ...

  8. 微信开发模板--easywechat

    链接地址:https://easywechat.org/zh-cn/docs/installation.html

  9. 1.4 使用电脑测试MC20的接收英文短信功能

    需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...

  10. Summaries On Java

    @1:== 和 equals(): ==用于比较引用和比较基本数据类型时具有不同的功能: 比较基本数据类型:如果两个值相同,则结果为true. 比较引用:如果引用指向内存中的同一对象,结果为true( ...