Submission #1229439

#TimeUsernameProblemLanguageResultExecution timeMemory
1229439GrayRectangles (IOI19_rect)C++20
0 / 100
472 ms1114112 KiB

#include "rect.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ff first
#define ss second

bool cols[700][700][700];
bool rows[700][700][700];
int upw[700][700][700];

long long count_rectangles(vector<vector<int>> a) {
    memset(cols, 0, sizeof(cols));
    memset(rows, 0, sizeof(rows));
    memset(upw, 0, sizeof(upw));
    int n=a.size(), m=a[0].size();
    int cmx;
    for (int j=1; j<m-1; j++){
        for (int up=1; up<n-1; up++){
            cmx=a[up][j];
            for (int down=up; down<n-1; down++){
                cmx=max(cmx, a[down][j]);
                if (cmx<a[up-1][j] and cmx<a[down+1][j]){
                    cols[j][up][down]=1;
                }
            }
        }
    }
    for (int i=1; i<n-1; i++){
        for (int l=1; l<m-1; l++){
            cmx=a[i][l];
            for (int r=l; r<m-1; r++){
                cmx=max(cmx, a[i][r]);
                if (cmx<a[i][l-1] and cmx<a[i][r+1]){
                    rows[i][l][r]=1;
                }
            }
        }
    }
    for (int i=1; i<n-1; i++){
        for (int l=1; l<m-1; l++){
            for (int r=l; r<m-1; r++){
                upw[i][l][r]=(rows[i][l][r]?upw[i-1][l][r]+1:0);
            }
        }
    }
    ll cnt=0;
    for (int up=1; up<n-1; up++){
        for (int down=up; down<n-1; down++){
            for (int r=1; r<m-1; r++){
                for (int l=r; l>=1; l--){
                    if (!cols[l][up][down]){
                        break;
                    }
                    if (upw[down][l][r]>=(down-up+1)) {
                        cnt++;
                    }
                }
            }
        }
    }
	return cnt;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...