제출 #1160945

#제출 시각아이디문제언어결과실행 시간메모리
1160945NurislamThe Kingdom of JOIOI (JOI17_joioi)C++20
0 / 100
0 ms320 KiB
#include <bits/stdc++.h>

using namespace std;


#define int long long
#define pb push_back

int inf = 2e9;

void solve(){
	int n, m;
	cin >> n >> m;
	vector<vector<int>> a(n, vector<int> (m));
	
	array<int,3> mx = {0, 0, 0}, mn = {inf, 0, 0};
	for(int i = 0; i < n; i ++ )
		for(int j = 0; j < m; j ++ ){
			cin >> a[i][j];
			if(mx[0] <= a[i][j]) mx = {a[i][j], i, j};
			if(mn[0] >= a[i][j]) mn = {a[i][j], i, j};
		}
	int l = 0, r = mx[0] - mn[0], ans = r;
	
	vector<int> dx = {-1,1,0,0}, dy = {0,0,-1,1};
	auto ok = [&](int i, int j) -> bool {
		return (i >= 0 && i < n && j >= 0 && j < m);
	};
	
	auto ch = [&]( int mid ) -> bool {
		//cout << mid << endl;
		vector<vector<int>> us1(n, vector<int> (m, 0));
		vector<vector<int>> us2(n, vector<int> (m, 0));
		
		queue<array<int,2>> q;
		q.push({mn[1], mn[2]});
		us1[mn[1]][mn[2]] = 1;
		while(q.size()){
			auto [i, j] = q.front();
			q.pop();
			//cout << i << ' ' << j << '\n';
			for(int k = 0; k < 4; k ++ ){
				int ni = i + dx[k], nj = j + dy[k];
				if(ok(ni, nj) && !us1[ni][nj] && a[ni][nj] - mn[0] <= mid){
					us1[ni][nj] = 1;
					q.push({ni, nj});
				}
			}
		};
		//cout << '\n';
		q.push({mx[1], mx[2]});
		us2[mx[1]][mx[2]] = 1;
		while(q.size()){
			auto [i, j] = q.front();
			q.pop();
			//cout << i << ' ' << j << '\n';
			for(int k = 0; k < 4; k ++ ){
				int ni = i + dx[k], nj = j + dy[k];
				if(ok(ni, nj) && !us2[ni][nj] && mx[0] - a[ni][nj] <= mid){
					us2[ni][nj] = 1;
					q.push({ni, nj});
				}
			}
		};
		//cout << '\n';
		for(int i = 0; i < n; i ++ )
			for(int j = 0; j < m; j ++ )
				if(!(us1[i][j] || us2[i][j]))return 0;
		
		return 1;
	};
	
	
	while( l <= r ) {
		int m = (l + r) >> 1;
		if(ch(m)){
			ans = m;
			r = m - 1;
		}else l = m + 1;
	};
	
	cout << ans << '\n';
};

signed main(){
	ios_base::sync_with_stdio();
	cin.tie(nullptr); cout.tie(nullptr);
	int tt = 1;
	//cin >> tt;
	
	while(tt -- ){
		solve();
	};
	
};
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...