#include <bits/stdc++.h>
#include "rect.h"
using namespace std;
long long count_rectangles(vector<vector<int> > a) {
	int N = a.size(),M = a[0].size();
	vector<vector<bool>> vis(N,vector<bool>(M,false));
	int li,ri,lj,rj;
	int cnt;
	int di[4] = {1,0,-1,0};
	int dj[4] = {0,1,0,-1};
	function<void(int,int)> fill_up = [&](int i,int j){
		li = min(li,i), lj = min(lj,j);
		ri = max(ri,i), rj = max(rj,j);
		cnt++;
		
		for(int d = 0;d < 4;d++){
			int ni = i+di[d];
			int nj = j+dj[d];
			if(ni < 0 || nj < 0 || ni >= N || nj >= N) continue;
			if(a[ni][nj] == 1) continue;
			if(vis[ni][nj]) continue;
			vis[ni][nj] = true;
			fill_up(ni,nj);
		}
	};
	long long ans = 0;
	for(int i = 0;i < N;i++){
		for(int j = 0;j < M;j++){
			if(a[i][j] == 1 || vis[i][j]) continue;
			li = i,ri = i,lj = j,rj = j,cnt = 0;
			vis[i][j] = true;
			fill_up(i,j);
			if(li == 0 || lj == 0 || ri == N-1 || rj == M-1) continue;
			if((ri-li+1)*(rj-lj+1) != cnt) continue;
			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... |