Submission #399702

#TimeUsernameProblemLanguageResultExecution timeMemory
399702SavicSThe Kingdom of JOIOI (JOI17_joioi)C++14
0 / 100
1 ms336 KiB
#include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #include <bits/stdc++.h> #define fi first #define se second #define pb push_back #define sz(a) (int)a.size() #define all(a) a.begin(), a.end() #define rall(a) a.rbegin(), a.rend() #define ff(i,a,b) for(int i=a;i<=b;i++) #define fb(i,b,a) for(int i=b;i>=a;i--) using namespace std; using namespace __gnu_pbds; typedef long long ll; typedef pair<int,int> pii; const int maxn = 2005; const int inf = 1e9 + 5; template<typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; // os.order_of_key(k) the number of elements in the os less than k // *os.find_by_order(k) print the k-th smallest number in os(0-based) int n, m; int mat[maxn][maxn]; int ide[maxn]; bool check(int X) { memset(ide, 0, sizeof(ide)); // opadajacu { ide[0] = inf; int mn = inf, mx = 0; ff(i,1,n) { int pommx = mx, pommn = mn; ff(j,1,m) { pommx = max(pommx, mat[i][j]); pommn = min(pommn, mat[i][j]); if(pommx - pommn > X)break; mx = pommx, mn = pommn; ide[i] = j; } ide[i] = min(ide[i], ide[i - 1]); } int najv = 0, najm = inf; ff(i,1,n) { ff(j,ide[i] + 1,m) { najv = max(najv, mat[i][j]); najm = min(najm, mat[i][j]); } } if(najv - najm <= X)return 1; } memset(ide, 0, sizeof(ide)); // rastuce { ide[n + 1] = inf; int mn = inf, mx = 0; fb(i,n,1) { int pommx = mx, pommn = mn; ff(j,1,m) { pommx = max(pommx, mat[i][j]); pommn = min(pommn, mat[i][j]); if(pommx - pommn > X)break; mx = pommx, mn = pommn; ide[i] = j; } ide[i] = min(ide[i], ide[i + 1]); } int najv = 0, najm = inf; ff(i,1,n) { ff(j,ide[i] + 1,m) { najv = max(najv, mat[i][j]); najm = min(najm, mat[i][j]); } } if(najv - najm <= X)return 1; } return 0; } int main() { ios::sync_with_stdio(false); cout.tie(nullptr); cin.tie(nullptr); cin >> n >> m; ff(i,1,n)ff(j,1,m)cin >> mat[i][j]; int l = 0, r = inf, ans = 0; while(l <= r) { int mid = (l + r) / 2; if(check(mid)) { r = mid - 1; ans = mid; } else l = mid + 1; } cout << ans << endl; return 0; } /** // probati bojenje sahovski ili slicno **/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...