题目大意:

给定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. 实验吧-隐写术-黑与白(二)(反转+五笔+Image steganography)

    反转有二:颜色反转.文件名反转 文件名这么乱,毫无规律,好奇怪,进行反转后发现是:steganography(就是隐写术的意思),这还是个图片文件,有一款工具正好叫Image steganograph ...

  2. .net微软企业库的事务回滚

    事务是自定义的一个操作序列. 其中的操作要么全部执行要么全部不执行,是一个不可分割的工作单位.通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性. Databa ...

  3. spring 动态bean注册

    1. import org.springframework.beans.MutablePropertyValues; import org.springframework.beans.factory. ...

  4. SpringMVC: Ajax技术

    SpringMVC:Ajax技术 简介 AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 是一种在无需重新加载整个网 ...

  5. 动态添加,删除class样式

    function hasClass(obj, cls) { //class位于单词边界,判断class样式是否已经存在 return obj.className.match(new RegExp('( ...

  6. HDU 5285:wyh2000 and pupil

    wyh2000 and pupil  Accepts: 93  Submissions: 925  Time Limit: 3000/1500 MS (Java/Others)  Memory Lim ...

  7. SpringCloud学习之Sleuth服务链路跟踪(十二)

    一.为什么需要Spring Cloud Sleuth 微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元.由于服务单元数量众多,业务的复杂性,如果出现了错误和异常,很 ...

  8. UVALive 3634 数据结构模拟

    这题真是坑啊,题意不明,其实就是往桟里面压入空的set集合,所以之前的询问大小都是只有0,只有add的时候,才会产生新的占空间的集合 用stack和set直接进行模拟 #include <ios ...

  9. 高分Essay写作需注意以下几个细节

    目前为止,已经有很多同学问我这个了,所以这次专门来讨论下这个问题.英语essay能达到预期分数吗,答案是肯定的,甚至会超出预期,但是必须注意到几方面,越是细节问题,越容易导致丢分,所以请重视-! 一. ...

  10. Golang---sort包

    Sort 包介绍 Go 语言标准库 sort 包中实现了几种基本的排序算法:插入排序.快速排序和堆排序,但是在使用 sort 包进行排序时无需具体考虑使用哪种排序方式,因为该方法会根据传入的排序的数据 ...