You are given n arrays a1, a2, …, an; each array consists of exactly m integers. We denote the y-th element of the x-th array as ax,y.

You have to choose two arrays ai and aj (1≤i,j≤n, it is possible that i=j). After that, you will obtain a new array b consisting of m integers, such that for every k∈[1,m] bk=max(ai,k,aj,k).

Your goal is to choose i and j so that the value of mink=1mbk is maximum possible.

Input
The first line contains two integers n and m (1≤n≤3⋅105, 1≤m≤8) — the number of arrays and the number of elements in each array, respectively.

Then n lines follow, the x-th line contains the array ax represented by m integers ax,1, ax,2, …, ax,m (0≤ax,y≤109).

Output
Print two integers i and j (1≤i,j≤n, it is possible that i=j) — the indices of the two arrays you have to choose so that the value of mink=1mbk is maximum possible. If there are multiple answers, print any of them.

Example
inputCopy
5
0 3 1 2
8 9 1 3
2 3 4 5
1 0 3 7
3 0 6 3
4 1 7 0
outputCopy
5
思路:最小值最大化问题,绝大概率是二分。但是二分之后的judge环节怎么弄呢?这就是本题的出彩之处。我们将每一个数组中的大于等于mid的位置设置为1,否则就设置为0。这样我们进行或操作,这样出来的就是取最大值操作了。这样如果两两相或,如果各个位上都是1,就代表着当前的mid就是最小值,然后不断的二分,就可以找到最优解了。
代码如下:

#include<bits/stdc++.h>
#define ll long long
using namespace std;const int maxx=3e5+100;
int a[maxx][10];
int vis[maxx];
int n,m;inline bool check(int mid,int &x,int &y)
{memset(vis,0,sizeof(vis));for(int i=1;i<=n;i++){int cc=0;for(int j=1;j<=m;j++) if(a[i][j]>=mid) cc|=(1<<(j-1));vis[cc]=i;}for(int i=0;i<=255;i++)//由于最大就是8位,所以最大是255。{for(int j=0;j<=255;j++){if(vis[i]&&vis[j]&&(i|j)==(1<<m)-1){x=vis[i];y=vis[j];return 1;}}}return 0;
}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++) scanf("%d",&a[i][j]);int l=0,r=1000000000;int x,y;while(l<=r){int mid=l+r>>1;if(check(mid,x,y)) l=mid+1;else r=mid-1;}cout<<x<<" "<<y<<endl;return 0;
}

努力加油a啊,(o)/~

Minimax Problem(二分+二进制状态压缩)相关推荐

  1. 《算法竞赛进阶指南》打卡-基本算法-AcWing 94. 递归实现排列型枚举:dfs、二进制状态压缩

    文章目录 题目解答 题目来源 题目解答 分析: dfs求全排列,这里是用二进制状态压缩进行优化,二进制状态压缩,顾名思义,每个状态是用二进制的某一位表示.这里的体现是state这个状态,它的每一位代表 ...

  2. 《算法竞赛进阶指南》打卡-基本算法-AcWing 92. 递归实现指数型枚举:递推与递归、二进制状态压缩、dfs

    文章目录 题目解答 题目链接 题目解答 分析: 优化:用二进制状态压缩,也就是用二进制上的位来记录数有没有被用过. ac代码 #include<bits/stdc++.h> using n ...

  3. 【基本算法】 位运算:二进制状态压缩

    二进制状态压缩 二进制状态压缩,是指将一个n位的 bool 数组用 n 位的二进制数表示的方法. OP 运算 取出 n 在二进制表示下的第k位 (n >> k) & 1 取出 n ...

  4. CodeForces - 1288D Minimax Problem(二分+状态压缩)

    题目链接:点击查看 题目大意:给出一个n*m的矩阵,我们用maze[n][m]来表示每一个元素,现在我们需要选出其中 i 和 j 两行,i 和 j 可以相同,用这两行的元素构成一个新的数组a,构造规则 ...

  5. 皮卡丘的梦想2(线段树+二进制状态压缩)

    Description 一天,一只住在 501 实验室的皮卡丘决定发奋学习,成为像 LeiQ 一样的巨巨,于是他向镇上的贤者金桔请教如何才能进化成一只雷丘. 金桔告诉他需要进化石才能进化,并给了他一个 ...

  6. hdu2553 N皇后问题【二进制状态压缩基础】

    rt,二进制压缩的入门题,依旧卡了一个多小时,还不算之前看的那一遍orz 本题要求行列两个斜线都不能多于一个,就算是一行一行遍历,也需要考虑状态的转移方法及记录转移的方法,那么,二进制华丽丽的出场啦~ ...

  7. 二进制状态压缩相关操作

    取出整数n在二进制表示下的第k位:(n>>k)&1 取出整数n在二进制表示下的第0~k-1位(后k位):n&((1<<k)-1) 把整数n在二进制表示下的第k位 ...

  8. 提高篇 第五部分 动态规划 第4章 状态压缩类动态规划

    例1 骑士(Sgu223) 1592:[例 1]国王 信息学奥赛一本通(C++版)在线评测系统 https://blog.csdn.net/guoyangfan_/article/details/82 ...

  9. 《算法竞赛进阶指南》打卡-基本算法-AcWing 93. 递归实现组合型枚举:递归与递推、dfs、状态压缩

    文章目录 题目解答 题目链接 题目解答 分析: 此题和笔者另一篇博文很像,只不过是限定了个数.<算法竞赛进阶指南>打卡-基本算法-AcWing 92. 递归实现指数型枚举:递推与递归.二进 ...

最新文章

  1. 没有执行力,谈什么目标理想?
  2. html lt table 设置数据,vue_+_element_ui_动态添加table数据
  3. Python环境的安装
  4. 排序算法——希尔排序(缩小增量排序)
  5. 数据可视化【十三】地区分布图
  6. 后台返回数据打印是[object object]的,报错:SyntaxError: JSON.parse: expected property name or ‘}‘ at line 1 column
  7. jsonwebtoken jwt token 简单加密
  8. 自学PHP有哪些书籍和教程值得推荐?
  9. centos环境下安装redis
  10. @开发者,一文搞懂什么是 C# 计时器!|CSDN 博文精选
  11. 如何使用Aimersoft Video Suite Mac将 DVD 刻录到 ISO/DVD 文件夹
  12. ODbgscript 1.82.x Document
  13. 超浪漫-HTML5生日祝福网页制作 ❤粉色少女系列为你定制❤ HTML+CSS+JavaScript
  14. 智慧城管系统提高城市综合管理水平
  15. VS修改软件生成的 exe名称
  16. 大数据趋势下,服务风暴必将来临
  17. html中边距属性,CSS边距属性
  18. gae mysql_国内几大云服务引擎 BAE、SAE 与 GAE 优劣对比
  19. 移动宽带套餐介绍_中国移动宽带最新套餐介绍
  20. linux scp 排除文件夹,scp复制文件时排除指定文件

热门文章

  1. 华硕t100ta做linux,华硕T100TA个人补充评测
  2. java循环满足跳出_java跳出循环的几种方式
  3. 编写程序定义一个有 10 个 int 型元素的数组,并以其在数组中的位置作为各元素的初值。
  4. pythonsklearn多元回归回归_用sklearn进行多元线性回归
  5. 设计模式之观察者模式--中英文结合理解版
  6. SCCM 2012系列3 安装SCCM 2012
  7. ODB——基于c++的ORM映射框架尝试(使用)
  8. MVC+EF三层+抽象工厂项目搭建
  9. 深入Java核心 Java内存分配原理精讲(3)
  10. 数据结构算法的一些归纳