#include <bits/stdc++.h>
using namespace std;
int mv[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int main(){
int n,m;
scanf("%i %i",&n,&m);
vector<vector<int>> a(n+1,vector<int>(m+1,0));
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf("%i",&a[i][j]);
}
}
if(n>m){
vector<vector<int>> tmp(m+1,vector<int>(n+1,0));
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
tmp[j][i]=a[i][j];
}
}
a=tmp;
swap(n,m);
}
vector<vector<int>> in(n+1,vector<int>(m+1,0));
vector<int> cnt(5,0);
int ans=0;
for(int xl=1;xl<=n;xl++){
for(int xr=xl;xr<=n;xr++){
for(int yl=1;yl<=m;yl++){
for(int yr=yl;yr<=m;yr++){
auto InRange=[&](int x,int y){
return x>=xl && x<=xr && y>=yl && y<=yr;
};
auto Add=[&](int x,int y){
array<int,3> mx={0,0,0};
for(int i=0;i<4;i++){
int nx=x+mv[i][0];
int ny=y+mv[i][1];
if(InRange(nx,ny) && a[nx][ny]<a[x][y]){
mx=max(mx,{a[nx][ny],nx,ny});
}
}
if(mx[0]!=0){
cnt[in[mx[1]][mx[2]]]--;
in[mx[1]][mx[2]]++;
cnt[in[mx[1]][mx[2]]]++;
}
};
auto Upd=[&](int x,int y){
yr--;
array<int,3> mx={0,0,0};
for(int i=0;i<4;i++){
int nx=x+mv[i][0];
int ny=y+mv[i][1];
if(InRange(nx,ny) && a[nx][ny]<a[x][y]){
mx=max(mx,{a[nx][ny],nx,ny});
}
}
yr++;
if(mx[0]!=0){
cnt[in[mx[1]][mx[2]]]--;
in[mx[1]][mx[2]]--;
cnt[in[mx[1]][mx[2]]]++;
}
Add(x,y);
};
cnt[0]+=xr-xl+1;
for(int i=xl;i<=xr;i++){
Add(i,yr);
if(yr!=yl){
Upd(i,yr-1);
}
}
int sz=(xr-xl+1)*(yr-yl+1);
if(cnt[0]==1 && cnt[1]==sz-1){
ans++;
}
}
for(int yr=yl;yr<=m;yr++){
for(int i=xl;i<=xr;i++){
in[i][yr]=0;
}
}
cnt=vector<int>(5,0);
}
}
}
printf("%i\n",ans);
return 0;
}
Compilation message (stderr)
Main.cpp: In function 'int main()':
Main.cpp:7:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
7 | scanf("%i %i",&n,&m);
| ~~~~~^~~~~~~~~~~~~~~
Main.cpp:11:18: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
11 | scanf("%i",&a[i][j]);
| ~~~~~^~~~~~~~~~~~~~~
# | 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... |