题目大意

题意

分析

对于数据 n,m<=2500n,m <= 2500, 优化读入

考虑二分该值 xx

对于 check()check() 只需要满足每列都要有至少一个不小于x且至少有一行存在至少有两个不小于 xxtruetrue 否则 falsefalse

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
int n,m;
int v[2505][2505];

int col[2505],row[2505];
int chk(int x){
for(int i = 1;i <= m;i++) col[i] = 0;
for(int i = 1;i <= n;i++) row[i] = 0;
for(int i = 1;i <= n;i++) for(int j = 1;j <= m;j++) if(v[i][j] >= x) col[j]++,row[i]++;
for(int i = 1;i <= m;i++) if(!col[i]) return false;
for(int i = 1;i <= n;i++) if(row[i] >= 2) return true;
return false;
}
signed main()
{
n = read(),m = read();
for(int i = 1;i <= n;i++)for(int j = 1;j <= m;j++) v[i][j] = read();

int l = 0,r = 1e9;
while(l < r){
int mid = l + r + 1>> 1;
if(chk(mid)) l = mid;
else r = mid - 1;
}
print(l);
return 0;
}