#include "rect.h"
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2505;
int mxl[MAXN][MAXN], mxr[MAXN][MAXN], mxu[MAXN][MAXN], mxd[MAXN][MAXN];
long long count_rectangles(vector<vector<int> > a) {
int n = a.size(), m = a[0].size();
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
mxl[i][j] = 1;
for(int k = j-1; k >= 1; k--)
if(a[i-1][k-1] >= a[i-1][j-1]){mxl[i][j] = k+1; break;}
mxr[i][j] = m;
for(int k = j+1; k <= m; k++)
if(a[i-1][k-1] >= a[i-1][j-1]){mxr[i][j] = k-1; break;}
mxu[i][j] = 1;
for(int k = i-1; k >= 1; k--)
if(a[k-1][j-1] >= a[i-1][j-1]){mxu[i][j] = k+1; break;}
mxd[i][j] = n;
for(int k = i+1; k <= n; k++)
if(a[k-1][j-1] >= a[i-1][j-1]){mxd[i][j] = k-1; break;}
}
}
long long ans = 0;
for(int i1 = 2; i1 < n; i1++){
for(int j1 = 2; j1 < m; j1++){
int ej = m;
for(int i2 = i1; i2 < n; i2++){
ej = min(ej, mxr[i2][j1-1]);
for(int j2 = j1; j2 <= min(m-1,ej); j2++){
if(mxd[i1-1][j2] < i2 || mxu[i2+1][j2] > i1)break;
long long aux = 1;
for(int i = i1; i <= i2; i++)
if(mxl[i][j2+1] > j1){aux = 0; break;}
ans += aux;
}
}
}
}
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... |