Submission #1203222

#TimeUsernameProblemLanguageResultExecution timeMemory
1203222ElayV13Maxcomp (info1cup18_maxcomp)C++20
30 / 100
1093 ms1096 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

const int INF = 1e18;
const int N = 1001;

int n , m;
int a[N][N] , nw[N][N] , md[N][N] , dx[] = {1 , -1 , 0 , 0} , dy[] = {0 , 0 , 1 , -1};

signed main()
{
      ios_base::sync_with_stdio(0);cin.tie(0);
      cin >> n >> m;
      for(int i = 0;i < n;i++) for(int j = 0;j < m;j++) cin >> a[i][j];
      int res = -INF;
      for(int i = 0;i < n;i++)
      {
              for(int j = 0;j < m;j++)
              {
                      for(int _i = 0;_i < n;_i++)
                      {
                              for(int _j = 0;_j < m;_j++)
                              {
                                      if(a[i][j] < a[_i][_j]) continue;
                                      for(int ii  = 0;ii < n;ii++)
                                      {
                                              for(int jj = 0;jj < m;jj++)
                                              {
                                                      md[ii][jj] = INF;
                                                      nw[ii][jj] = (a[ii][jj] >= a[_i][_j] && a[ii][jj] <= a[i][j]);
                                              }
                                      }
                                      queue < pair < int , int > > q;
                                      md[i][j] = 0;
                                      q.push({i , j});
                                      while(!q.empty()){
                                                pair < int , int > p = q.front();
                                                q.pop();
                                                int x = p.first , y = p.second;
                                                for(int t = 0;t < 4;t++)
                                                {
                                                        int nx = x + dx[t] , ny = y + dy[t];
                                                        if(md[nx][ny] == INF && nw[nx][ny] == 1 && nx >= 0 && nx <= n - 1 && ny >= 0 && ny <= m - 1)
                                                        {
                                                                md[nx][ny] = md[x][y] + 1;
                                                                q.push({nx , ny});
                                                        }
                                                }
                                      }
                                      int val = a[i][j] - md[_i][_j] - a[_i][_j] - 1;
                                      if(md[_i][_j] != INF)
                                      res = max(res , val);
                              }
                      }
              }
      }
      cout << res << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...