Submission #1315201

#TimeUsernameProblemLanguageResultExecution timeMemory
1315201vlomaczkDesignated Cities (JOI19_designated_cities)C++20
0 / 100
1064 ms63824 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
typedef long long ll;
using namespace __gnu_pbds;
using namespace std;

template <typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

ll MM = 2010;
ll inf = 1e18;

ll M=0,m=inf;
vector<vector<ll>> mapa(MM, vector<ll>(MM));
ll w,h;

void rotate90() {
	vector<vector<ll>> N(MM, vector<ll>(MM));
	for(ll i=0; i<w; ++i) for(ll j=0; j<h; ++j) N[i][j] = mapa[j][w-i-1];
	swap(mapa,N);
	swap(w,h);
}

ll solve() {
	ll lo=0, hi=M-m;
	while(lo < hi) {
		ll mid = (lo+hi)/2;
		vector<ll> H(w);
		ll last = 0;
		for(ll i=0; i<w; ++i) {
			ll curr = h-1;
			while(curr > last && mapa[curr][i] >= M-mid) curr--;
			last = H[i] = curr;
		}
		ll maxi = 0, mini = inf;
		for(ll i=0; i<w; ++i) {
			for(ll j=0; j<H[i]; ++j) {
				maxi = max(maxi, mapa[j][i]);
				mini = min(mini, mapa[j][i]);
			}
		}
		if(maxi - mini <= mid) hi = mid;
		else lo = mid + 1;
	}
	return lo;
}

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	ll res = inf;
	cin >> h >> w;
	for(ll i=0; i<h; ++i) {
		for(ll j=0; j<w; ++j) {
			cin >> mapa[i][j];
			M = max(M,mapa[i][j]);
			m = min(m,mapa[i][j]);
		}
	}
	for(ll i=0; i<4; ++i) {
		res = min(res,solve());
		rotate90();
	}
	cout << res << "\n";

	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...