cheater2k

The Kingdom of JOIOI (JOI17_joioi)

Jun 18th, 2018
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.49 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int N = 2005;
  5. const int inf = 1e9 + 7;
  6.  
  7. int n, m;
  8. int a[N][N], tmp[N][N];
  9. int mnR[N][N], mxR[N][N];
  10. int pos[N];
  11.  
  12. void _rotate() {
  13.     for (int i = 1; i <= n; ++i) for (int j = 1; j <= m; ++j) tmp[j][n + 1 - i] = a[i][j];
  14.     swap(n, m);
  15.     for (int i = 1; i <= n; ++i) for (int j = 1; j <= m; ++j) a[i][j] = tmp[i][j];
  16. }
  17.  
  18. int ans = inf;
  19. int mn = inf;
  20.  
  21. bool check(int val) {
  22.     for (int i = 1; i <= n; ++i) {
  23.         pos[i] = m + 1;
  24.         for (int j = 1; j <= m; ++j) if (a[i][j] > mn + val) { pos[i] = j; break; }
  25.     }
  26.    
  27.     for (int i = 1; i <= n; ++i) {
  28.         mnR[i][m + 1] = inf; mxR[i][m + 1] = 0;
  29.         for (int j = m; j >= 1; --j) {
  30.             mnR[i][j] = min(mnR[i][j + 1], a[i][j]);
  31.             mxR[i][j] = max(mxR[i][j + 1], a[i][j]);
  32.         }
  33.     }
  34.  
  35.     int cur = m;
  36.     int cur_min = inf, cur_max = 0;
  37.     for (int i = 1; i <= n; ++i) {
  38.         cur = min(cur, pos[i] - 1);
  39.         cur_min = min(cur_min, mnR[i][cur + 1]);
  40.         cur_max = max(cur_max, mxR[i][cur + 1]);
  41.     }
  42.  
  43.     return cur_max - cur_min <= val;
  44. }
  45.  
  46. void solve() {
  47.     int l = 0, r = inf;
  48.     while(l < r) {
  49.         int mid = ((l + r) >> 1);
  50.         if (check(mid)) r = mid; else l = mid + 1;
  51.     }
  52.     if (check(l)) ans = min(ans, l);
  53. }
  54.  
  55. int main() {
  56.     ios_base::sync_with_stdio(false); cin.tie(0);
  57.     cin >> n >> m;
  58.     for (int i = 1; i <= n; ++i) {
  59.         for (int j = 1; j <= m; ++j) cin >> a[i][j], mn = min(mn, a[i][j]);
  60.     }
  61.    
  62.     solve();
  63.  
  64.     _rotate();
  65.     solve();
  66.  
  67.     _rotate();
  68.     solve();
  69.  
  70.     _rotate();
  71.     solve();
  72.  
  73.     printf("%d\n", ans);   
  74. }
Advertisement
Add Comment
Please, Sign In to add comment