Submission #26929

#TimeUsernameProblemLanguageResultExecution timeMemory
26929kajebiiiThe Kingdom of JOIOI (JOI17_joioi)C++14
100 / 100
3089 ms123784 KiB
#include <stdio.h>
#include <bits/stdc++.h>

using namespace std;

#define SZ(v) ((int)(v).size())
#define ALL(v) (v).begin(),(v).end()
#define one first
#define two second
typedef long long ll;
typedef pair<int, int> pi;
typedef pair<ll, int> pli;
typedef tuple<int, int, int> ti;
const int INF = 0x3f2f1f0f;
const ll LINF = 1ll * INF * INF;

const int MAX_N = 2e3 + 10;

int H, W, Nr[MAX_N][MAX_N], Memo[MAX_N][MAX_N];;
vector<ti> Ts;
vector<int> Co;
int solve() {
	int cN = SZ(Co);
	int minV, mx, my; tie(minV, mx, my) = Ts[0];
	int maxV = get<0>(Ts.back()), tempL = -1;
	for(int i=0; i<=mx; i++) for(int j=0; j<=my; j++) tempL = max(tempL, Nr[i][j]);
	int res = INF;
	for(int l=tempL-minV, r=maxV-minV; l<=r;) {
		int m = (l+r) >> 1;
		int last = W-1;
		int mxV = -1, mnV = INF;
		for(int i=0, now; i<H; i++) {
			now = -1;
			while(now+1 <= last && Nr[i][now+1] - minV <= m) now++;
			last = now;
			for(int j=now+1; j<W; j++) mxV = max(mxV, Nr[i][j]), mnV = min(mnV, Nr[i][j]);
		}
		if(mxV - mnV <= m) res = m, r = m-1; else l = m+1;
	}
//	printf("res : [%d]\n\n", res);
	return res;
}
int main() {
	cin >> H >> W;
	for(int i=0; i<H; i++) for(int j=0; j<W; j++) 
		scanf("%d", &Nr[i][j]), Ts.push_back(ti(Nr[i][j], i, j)), Co.push_back(Nr[i][j]);
	sort(ALL(Ts)); sort(ALL(Co)); Co.erase(unique(ALL(Co)), Co.end());

	int ans = INF;
	for(int o0=0; o0<2; o0++) {
		for(int o1=0; o1<2; o1++) {
			ans = min(ans, solve());
			for(int i=0; i<H; i++) for(int j=0; j<W; j++) Memo[i][j] = Nr[i][j];
			for(int i=0; i<H; i++) for(int j=0; j<W; j++) Nr[i][j] = Memo[i][W-1-j];
			for(ti &e : Ts) get<2>(e) = W-1-get<2>(e);
		}
		for(int i=0; i<H; i++) for(int j=0; j<W; j++) Memo[i][j] = Nr[i][j];
		for(int i=0; i<H; i++) for(int j=0; j<W; j++) Nr[i][j] = Memo[H-1-i][j];
		for(ti &e : Ts) get<1>(e) = H-1-get<1>(e);
	}
	printf("%d\n", ans);
	return 0;
}

Compilation message (stderr)

joioi.cpp: In function 'int solve()':
joioi.cpp:23:6: warning: unused variable 'cN' [-Wunused-variable]
  int cN = SZ(Co);
      ^
joioi.cpp: In function 'int main()':
joioi.cpp:46:83: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d", &Nr[i][j]), Ts.push_back(ti(Nr[i][j], i, j)), Co.push_back(Nr[i][j]);
                                                                                   ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...