제출 #317041

#제출 시각아이디문제언어결과실행 시간메모리
317041casperwangMaxcomp (info1cup18_maxcomp)C++14
60 / 100
1014 ms24168 KiB
#include <bits/stdc++.h> #define pb push_back #define pii pair<int,int> #define pip pair<int,pii> #define ff first #define ss second using namespace std; const int MAXN = 1000; signed main() { ios_base::sync_with_stdio(0), cin.tie(0); int n, m; cin >> n >> m; vector <vector<int>> arr(n); vector <pip> ord; for (int i = 0; i < n; i++) { arr[i].resize(m); for (int j = 0; j < m; j++) { cin >> arr[i][j]; ord.pb(pip(arr[i][j], pii(i, j))); } } sort(ord.begin(), ord.end(), greater<pip>()); int ans = -1; queue <pii> bfs; vector <vector<bool>> vis(n); vector <vector<int>> dis(n), mmin(n); for (int j = 0; j < n; j++) vis[j].resize(m), dis[j].resize(m), mmin[j].resize(m); for (int i = 0; i < n * m; i++) { if (ord[i].ff + (n+m) < ord[0].ff) break; for (int a = 0; a < n; a++) for (int b = 0; b < m; b++) vis[a][b] = 0; bfs.push(ord[i].ss); vis[ord[i].ss.ff][ord[i].ss.ss] = 1; dis[ord[i].ss.ff][ord[i].ss.ss] = 1; mmin[ord[i].ss.ff][ord[i].ss.ss] = ord[i].ff; int val = ord[i].ff; while (i+1 < n * m && ord[i+1].ff == ord[i].ff) { bfs.push(ord[++i].ss); vis[ord[i].ss.ff][ord[i].ss.ss] = 1; dis[ord[i].ss.ff][ord[i].ss.ss] = 1; mmin[ord[i].ss.ff][ord[i].ss.ss] = ord[i].ff; } vector <int> dx = {0, 1, -1, 0}, dy = {1, 0, 0, -1}; while (bfs.size()) { pii w = bfs.front(); bfs.pop(); for (int j = 0; j < 4; j++) { int x = w.ff + dx[j], y = w.ss + dy[j]; if (x >= n || x < 0 || y >= m || y < 0) continue; if (!vis[x][y]) { vis[x][y] = 1; dis[x][y] = dis[w.ff][w.ss] + 1; mmin[x][y] = min(arr[x][y], mmin[w.ff][w.ss]); ans = max(ans, val - mmin[x][y] - dis[x][y]); bfs.push(pii(x, y)); } } } } cout << ans << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...