#include "rect.h"
#include <bits/stdc++.h>
using namespace std;
struct coor{
int r,c;
coor(){
r=c=0;
}
coor(int x,int y){
r=x;c=y;
}
};
struct segment{
int r,R,c,C;
segment(){
r=R=c=C=-1;
}
segment(int x,int X,int y,int Y){
r=x;R=X;c=y;C=Y;
}
};
vector<pair<int,coor>> vec;
vector<vector<segment>> grid;
long long count_rectangles(vector<vector<int> > a) {
int n=a.size(),m=a[0].size();
long long ans=0;
vec.resize(n*m);
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
vec[i*m+j]={a[i][j],coor(i,j)};
}
}
sort(vec.begin(),vec.end(),[](pair<int,coor> A,pair<int,coor> B){
return A.first<B.first;
});
grid.resize(a.size(),vector<segment>(a[0].size(),segment()));
for(int i=0;i<vec.size();i++){
int r=vec[i].second.r,c=vec[i].second.c;
for(int j=r;j>=0;j--){
if(a[j][c]>a[r][c]){
grid[r][c].r=j+1;
break;
}else if(j==0){
grid[r][c].r=0;
}
}
for(int j=r;j<n;j++){
if(a[j][c]>a[r][c]){
grid[r][c].R=j-1;
break;
}else if(j==n-1){
grid[r][c].R=n-1;
}
}
for(int j=c;j>=0;j--){
if(a[r][j]>a[r][c]){
grid[r][c].c=j+1;
break;
}else if(j==0){
grid[r][c].c=0;
}
}
for(int j=c;j<m;j++){
if(a[r][j]>a[r][c]){
grid[r][c].C=j-1;
break;
}else if(j==m-1){
grid[r][c].C=m-1;
}
}
// cout << r << ' ' << c << '\n';
// cout << grid[r][c].r << ' ' << grid[r][c].R << ' ' << grid[r][c].c << ' ' << grid[r][c].C << '\n';
bool can=(grid[r][c].r>0&&grid[r][c].R<n-1&&grid[r][c].c>0&&grid[r][c].C<m-1);
for(int j=grid[r][c].r;j<=grid[r][c].R;j++){
if(!can){
break;
}
for(int k=grid[r][c].c;k<=grid[r][c].C;k++){
if(grid[j][k].r==-1){
can=false;
break;
}else if(grid[j][k].r<grid[r][c].r){
can=false;
break;
}else if(grid[j][k].R>grid[r][c].R){
can=false;
break;
}else if(grid[j][k].c<grid[r][c].c){
can=false;
break;
}else if(grid[j][k].C>grid[r][c].C){
can=false;
break;
}
}
}
if(can){
ans++;
}
}
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... |