답안 #386373

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
386373 2021-04-06T13:15:27 Z ritul_kr_singh The Kingdom of JOIOI (JOI17_joioi) C++17
0 / 100
1 ms 364 KB
#pragma GCC optimize("Ofast,unroll-loops")

#include <bits/stdc++.h>
using namespace std;
// #define int long long
#define nl << '\n'
#define sp << ' ' <<

int h, w;
int g[2000][2000], a[2000], b[2000], maxElement, minElement;

bool possible(int diff){
	int res0 = 0, res1 = 0;
	for(int i=0; i<h; ++i){
		a[i] = 0;
		for(int j=0; j<w; ++j){
			if(g[i][j]-minElement<=diff) ++a[i];
			else break;
		}
		b[i] = a[i];
		a[i] = min(a[i], a[i-1]);
	}
	for(int i=h-2; i>=0; --i) b[i] = min(b[i], b[i+1]);
	for(int i=0; i<h; ++i){
		for(int j=a[i]; j<w; ++j)
			res0 = max(res0, maxElement - g[i][j]);
		for(int j=b[i]; j<w; ++j)
			res1 = max(res1, maxElement - g[i][j]);
	}
	return (res0<=diff or res1<=diff);
}

int search(){
	int res = maxElement - minElement;
	int low = 0, high = res;
	while(low<high){
		int mid = (low+high)/2;
		if(possible(mid)) high = mid;
		else low = mid+1;
	}
	if(!possible(low)) return res;
	return low;
}

void rotate(){
	int g0[h][w];
	for(int i=0; i<h; ++i)
		for(int j=0; j<w; ++j)
			g0[i][j] = g[i][j];
	swap(h, w);
	for(int i=0; i<h; ++i)
		for(int j=0; j<w; ++j)
			g[i][j] = g0[j][w-1-i];
}

signed main(){
	cin.tie(0)->sync_with_stdio(0);

	cin >> h >> w;
	for(int i=0; i<h; ++i)
		for(int j=0; j<w; ++j)
			cin >> g[i][j];
	int ans = 2e9;


	maxElement = minElement = g[0][0];
	for(int i=0; i<h; ++i)
		for(int j=0; j<w; ++j)
			maxElement = max(maxElement, g[i][j]), minElement = min(minElement, g[i][j]);

	for(int __=0; __<2; ++__){
		for(int _=0; _<4; ++_){
			if(_) rotate();
			ans = min(ans, search());
		}
		for(int i=0; i<h; ++i)
			for(int j=0; j<w; ++j)
				g[i][j] = -g[i][j];
		swap(maxElement, minElement);
		maxElement = -maxElement;
		minElement = -minElement;
	}

	cout << ans;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 364 KB Output is correct
2 Incorrect 1 ms 364 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 364 KB Output is correct
2 Incorrect 1 ms 364 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 364 KB Output is correct
2 Incorrect 1 ms 364 KB Output isn't correct
3 Halted 0 ms 0 KB -