This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "rect.h"
#include "bits/stdc++.h"
using namespace std;
using ll = long long;
long long count_rectangles(std::vector<std::vector<int>> a) {
ll ans = 0;
int n = a.size(), m = a[0].size();
vector<vector<vector<int>>> mx(n, vector<vector<int>>(m, vector<int>(m, INT_MIN)));
for(int i = 0; i < n; ++i) {
for(int j = 0; j < m; ++j) {
int mxx = INT_MIN;
for(int k = j; k < m; ++k) {
mxx = max(mxx, a[i][k]);
mx[i][j][k] = mxx;
}
}
}
vector<vector<vector<int>>> col(n, vector<vector<int>>(n, vector<int>(m, 0)));
for(int i = 1; i + 1 < n; ++i) {
for(int j = 0; j < m; ++j) {
int curmax = a[i][j];
for(int k = i; k + 1 < n; ++k) {
curmax = max(curmax, a[k][j]);
if(curmax < a[i - 1][j] && curmax < a[k + 1][j]) {
++col[i][k][j];
}
}
}
}
for(int i = 1; i + 1 < n; ++i) {
for(int k = i; k + 1 < n; ++k) {
for(int j = 1; j < m; ++j) {
col[i][k][j] += col[i][k][j - 1];
}
}
}
for(int i = 1; i + 1 < n; ++i) {
for(int j = 1; j + 1 < m; ++j) {
for(int k = j; k + 1 < m; ++k) {
for(int f = i; f + 1 < n; ++f) {
if(mx[f][j][k] >= min(a[f][j - 1], a[f][k + 1])) break;
if(col[i][f][k] - col[i][f][j - 1] == k - j + 1) {
++ans;
//cout << i << " " << j << " " << f << " " << k << "\n";
}
}
}
}
}
return ans;
}
# | 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |