bzoj5085: 最大 暴力 二分
Code:
#include<cstdio> #include<algorithm> #include<cstring> #include<iostream> #include<string> using namespace std; void setIO(string a){ freopen((a+".in").c_str(),"r",stdin); } const int maxn=1000+3; int n,m,val[maxn][maxn],v[maxn], c[maxn][maxn]; bool check(int delta){ int cnt=0; for(int i=1;i<=m;++i) for(int j=1;j<=m;++j) c[i][j]=0; for(int i=1;i<=n;++i) { cnt=0; for(int j=1;j<=m;++j) if(val[i][j]>=delta) v[++cnt]=j; for(int i=1;i<cnt;++i) for(int j=i+1;j<=cnt;++j) { if(c[v[i]][v[j]]) return true; c[v[i]][v[j]]=true; } } return false; } int main(){ //setIO("input"); int l=1000000000,r=0,ans=0; scanf("%d%d",&n,&m); for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) scanf("%d",&val[i][j]),l=min(l,val[i][j]),r=max(r,val[i][j]); while(l<=r){ int mid=(l+r)>>1; if(check(mid)) ans=mid,l=mid+1; else r=mid-1; } printf("%d",ans); return 0; }