This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
// Time Complexity: O(H^3 * W^3)
#include <vector>
#include <iostream>
using namespace std;
long long solve(int H, int W, vector<vector<int> > A) {
long long answer = 0;
for (int lx = 0; lx < H; lx++) {
for (int ly = 0; ly < W; ly++) {
for (int rx = lx + 1; rx <= H; rx++) {
for (int ry = ly + 1; ry <= W; ry++) {
int cx = -1, cy = -1, maxval = -1;
for (int i = lx; i < rx; i++) {
for (int j = ly; j < ry; j++) {
if (maxval < A[i][j]) {
maxval = A[i][j];
cx = i;
cy = j;
}
}
}
int cnt = 0;
while (true) {
cnt++;
int nx = -1, ny = -1, nxtval = -1;
if (cx != lx && A[cx - 1][cy] < A[cx][cy] && nxtval < A[cx - 1][cy]) {
nx = cx - 1; ny = cy; nxtval = A[cx - 1][cy];
}
if (cy != ly && A[cx][cy - 1] < A[cx][cy] && nxtval < A[cx][cy - 1]) {
nx = cx; ny = cy - 1; nxtval = A[cx][cy - 1];
}
if (cx != rx - 1 && A[cx + 1][cy] < A[cx][cy] && nxtval < A[cx + 1][cy]) {
nx = cx + 1; ny = cy; nxtval = A[cx + 1][cy];
}
if (cy != ry - 1 && A[cx][cy + 1] < A[cx][cy] && nxtval < A[cx][cy + 1]) {
nx = cx; ny = cy + 1; nxtval = A[cx][cy + 1];
}
if (nxtval == -1) {
break;
}
cx = nx; cy = ny;
}
if (cnt == (rx - lx) * (ry - ly)) {
answer++;
}
}
}
}
}
return answer;
}
int main() {
int H, W;
cin >> H >> W;
vector<vector<int> > A(H, vector<int>(W));
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
cin >> A[i][j];
}
}
long long answer = solve(H, W, A);
cout << answer << endl;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |