键盘敲碎夜深沉,代码如麻乱假真 • 2天前
/*
保证表示不属于路径的最小非负整数为x的情况下,使得x最大
比x小的格子必须全部经过,比x大的格子随意
*/
#include<bits/stdc++.h>
using namespace std;
int n,m;
vector<int> a[1000005];
bool check(int mid){ //检查是否可以保证小于mid的格子全部经过
//换为考虑是否存在左下和右上(绝对不能走)的情况
int lastj=0;
for(int i=1;i<=n;i++){
for(int j=0;j<m;j++){
if(a[i][j]<mid){
if(j>=lastj) lastj=j;
else return false;
}
}
}
return true;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
int s;
cin>>s;
a[i].push_back(s);
}
}
int left=0,right=n*m-1,ans=0;
while(left<=right){
int mid=(left+right)/2;
if(check(mid)){
ans=mid;
left=mid+1;
}else right=mid-1;
}
cout<<ans<<"\n";
return 0;
}
评论:
请先登录,才能进行评论