제출 #1162555

#제출 시각아이디문제언어결과실행 시간메모리
1162555jerzykThe Kingdom of JOIOI (JOI17_joioi)C++20
100 / 100
376 ms94932 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define st first #define nd second typedef long long ll; typedef long double ld; const ll I = 1000'000'000'000'000'000LL; const int II = 2'000'000'000; const ll M = 1000'000'007LL; const int N = 2007; int tab[N][N]; int t1[N][N], t2[N][N]; int m1[N][N], m2[N][N]; int dp[N][N]; void Calc(int n, int m) { for(int i = 1; i <= n; ++i) for(int j = 1; j <= m; ++j) m1[i][j] = max(t1[i][j], m1[i][j - 1]); for(int i = 1; i <= n; ++i) for(int j = m; j >= 1; --j) m2[i][j] = max(t2[i][j], m2[i][j + 1]); } int LiczDP(int n, int m) { Calc(n, m); for(int i = 1; i <= n; ++i) { dp[i][m + 1] = II; for(int j = m; j >= 0; --j) { dp[i][j] = max(dp[i - 1][j], max(m1[i][j], m2[i][j + 1])); dp[i][j] = min(dp[i][j], dp[i][j + 1]); } } return dp[n][0]; } void Solve() { int n, m, mi = II, ma = -1; cin >> n >> m; for(int i = 1; i <= n; ++i) for(int j = 1; j <= m; ++j) { cin >> tab[i][j]; mi = min(mi, tab[i][j]); ma = max(ma, tab[i][j]); } for(int i = 1; i <= n; ++i) for(int j = 1; j <= m; ++j) { t1[i][j] = tab[i][j] - mi; t2[i][j] = ma - tab[i][j]; } int ans = II; for(int r = 0; r < 2; ++r) { for(int l = 0; l < 2; ++l) { ans = min(ans, LiczDP(n, m)); for(int i = 1; i <= n; ++i) for(int j = 1; j <= m; ++j) swap(t1[i][j], t2[i][j]); } for(int i = 1; i <= n; ++i) for(int j = 1; j <= m / 2; ++j) { swap(t1[i][j], t1[i][m - j + 1]); swap(t2[i][j], t2[i][m - j + 1]); } } cout << ans << "\n"; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); //int t; cin >> t; //while(t--) Solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...