题目大意:

给定n个序列,每个序列元素个数严格相等于m

你需要找到两个序列a[i]和a[j],使其每个对应位置的元素取大后得到b序列  b[k]=max(a[i][k],a[j][k])

且让b序列中的最小值最大

i可以等于j

解题思路:

二分假设这个b序列的最小值的值x

将a序列转化成01构成的二进制串存在数组b中

0表示当前位置的值<x

1表示当前位置的值>=x

每次便最多可以得到3e5个字符

双层循环i,j从0到255(最大)

只要满足b[i]存在且b[j]存在且b[i]和b[j]按位取或后得到的结果每一位都是1(即a[i]和a[j]这两个数列按照题目所述方式得到的最小值比当前枚举的x大,此时说明二分的x是可行的,返回true)

如果找不到,返回false,说明x二分得太大了

二分的过程中在返回true之前就可以记录一下当前枚举到的i和j

总时间复杂度最坏情况为为O(log1e9 * (3e5+255^2)) 约为O(1e7)满足题意

#include<bits/stdc++.h>
using namespace std;
int a[][],b[],n,m,ci,cj,cpd=;
bool prim(int x){
int i,j,d;
memset(b,,sizeof b);
for(i=;i<=n;i++){
d=;
for(j=;j<m;j++)
if(a[i][j]>=x)
d|=(<<j);
b[d]=i;
}
for(i=;i<=cpd;i++)
for(j=;j<=cpd;j++)
if(b[i]&&b[j]&&((i|j)==cpd)){
ci=b[i];
cj=b[j];
return true;
}
return false;
}
int main(){
ios::sync_with_stdio();
cin.tie();cout.tie();
int i,j,l=,r=1e9,mid;
cin>>n>>m;
if(n==){
cout<<"1 1\n";
return ;
}
for(j=;j<m;j++)
cpd|=(<<j);
for(i=;i<=n;i++)
for(j=;j<m;j++)
cin>>a[i][j];
while(l<=r){
mid=(l+r)>>;
if(prim(mid))
l=mid+;
else
r=mid-;
}
prim(r);
cout<<ci<<' '<<cj<<endl; return ;
}

Codeforces 1288D - Minimax Problem的更多相关文章

  1. codeforces 1288D. Minimax Problem(二分)

    链接:https://codeforces.com/contest/1288/problem/D D. Minimax Problem 题意:给定n个数组,长度为m,从n中数组挑选两个数组,两个数组中 ...

  2. codeforces 340C Tourist Problem

    link:http://codeforces.com/problemset/problem/340/C 开始一点也没思路,赛后看别人写的代码那么短,可是不知道怎么推出来的啊! 后来明白了. 首先考虑第 ...

  3. codeforces B. Routine Problem 解题报告

    题目链接:http://codeforces.com/problemset/problem/337/B 看到这个题目,觉得特别有意思,因为有熟悉的图片(看过的一部电影).接着让我很意外的是,在纸上比划 ...

  4. Codeforces 527D Clique Problem

    http://codeforces.com/problemset/problem/527/D 题意:给出一些点的xi和wi,当|xi−xj|≥wi+wj的时候,两点间存在一条边,找出一个最大的集合,集 ...

  5. Codeforces 706C - Hard problem - [DP]

    题目链接:https://codeforces.com/problemset/problem/706/C 题意: 给出 $n$ 个字符串,对于第 $i$ 个字符串,你可以选择花费 $c_i$ 来将它整 ...

  6. Codeforces 1096D - Easy Problem - [DP]

    题目链接:http://codeforces.com/problemset/problem/1096/D 题意: 给出一个小写字母组成的字符串,如果该字符串的某个子序列为 $hard$,就代表这个字符 ...

  7. Codeforces 793C - Mice problem(几何)

    题目链接:http://codeforces.com/problemset/problem/793/C 题目大意:给你一个捕鼠器坐标,和各个老鼠的的坐标以及相应坐标的移动速度,问你是否存在一个时间点可 ...

  8. D. Minimax Problem(二分+二进制)

    D. Minimax Problem time limit per test 5 seconds memory limit per test 512 megabytes input standard ...

  9. CodeForces 687A NP-Hard Problem

    Portal:http://codeforces.com/problemset/problem/687/A 二分图染色 好模板题 有SPJ 值得注意的是,因为C++的奇妙的运算机制 若在vector变 ...

随机推荐

  1. mysql 事务使用教程

    一.什么是事务 事务Transaction,是指作为一个基本工作单元执行的一系列SQL语句的操作,要么完全地执行,要么完全地都不执行.   二.事务的特性       原子性         事务是一 ...

  2. 出现这样的错误提示: E: Sub-process /usr/bin/dpkg returned an error code

    1.$ sudo mv /var/lib/dpkg/info /var/lib/dpkg/info_old //现将info文件夹更名2.$ sudo mkdir /var/lib/dpkg/info ...

  3. 八、CI框架之输出URI路径,相当于GET

    一.controller中的代码如下: 二.我们打开一个路径,输出对应的路径URI的值 http://127.0.0.1/CodeIgniter-3.1.10/index.php/welcome/in ...

  4. stm32f4 dma + uart idle + double 调试小记

    使用 stm32f4 调试uart 接收, 使用 空闲中断,dma 双缓冲模式,有以下几点需要注意的. 调试的时候断点不要打在 if (USART_GetITStatus(USART6, USART_ ...

  5. 多线程进阶——JUC并发编程之CountDownLatch源码一探究竟

    1.学习切入点 JDK的并发包中提供了几个非常有用的并发工具类. CountDownLatch. CyclicBarrier和 Semaphore工具类提供了一种并发流程控制的手段.本文将介绍Coun ...

  6. Javascript里EQ、NE、GT、LT、GE、LE含义

    EQ 就是 EQUAL等于 NE就是 NOT EQUAL不等于 GT 就是 GREATER THAN大于  LT 就是 LESS THAN小于 GE 就是 GREATER THAN OR EQUAL ...

  7. mysql5.6免安装使用

    一.去MYSQL官网下载MYSQL免安装版,由于我的系统是64位的,所以就下载了64位的Mysql版本 http://cdn.mysql.com//Downloads/MySQL-5.6/mysql- ...

  8. jquery的读、写、增、删、查方法

    # 注:jquery需要导包  格式<script type="text/javascript" src="jquery-3.2.1.js">> ...

  9. oracle(8)视图和查询数据库对象方法

    视图 view 视图是数据库的对象之一. 视图也叫做虚表,既虚拟表,本质是对应一条select 语句, select语句的结果集赋予一个名字就是视图的名字. 作用: 1.可以简化复杂的查询 2.可以限 ...

  10. lvm 逻辑卷分区删除恢复

    原因:执行 lvremove /dev/system/lv_trans 删除逻辑分区 恢复: 1.进入到lvm查看元数据 cd /etc/lvm/archive 2.恢复元vg卷组 vgcfgrest ...