Submission #154134

#TimeUsernameProblemLanguageResultExecution timeMemory
15413479brueRectangles (IOI19_rect)C++14
15 / 100
5030 ms41312 KiB
#include <bits/stdc++.h>
#include "rect.h"

using namespace std;
typedef long long ll;

int n, m;
int board[2502][2502];
int maxVal1[82][82][82]; /// ----
int maxVal2[82][82][82]; /// ||||

ll count_rectangles(vector<vector<int> > _var) {
    n = (int)_var.size();
    m = (int)_var[0].size();
    ll ans = 0;
    bool pos;

    for(int i=1; i<=n; i++){
        for(int j=1; j<=m; j++){
            board[i][j] = _var[i-1][j-1];
        }
    }

    for(int i=1; i<=n; i++){
        for(int j=1; j<=m; j++){
            for(int k=j; k<=m; k++){
                for(int l=j; l<=k; l++){
                    maxVal1[i][j][k] = max(maxVal1[i][j][k], board[i][l]);
                }
            }
        }
    }

    for(int i=1; i<=m; i++){
        for(int j=1; j<=n; j++){
            for(int k=j; k<=n; k++){
                for(int l=j; l<=k; l++){
                    maxVal2[i][j][k] = max(maxVal2[i][j][k], board[l][i]);
                }
            }
        }
    }

    for(int i=2; i<n; i++){
        for(int j=2; j<m; j++){
            for(int k=i; k<n; k++){
                for(int l=j; l<m; l++){
                    pos = 1;
                    for(int x=i; x<=k; x++){
                        if(maxVal1[x][j][l] >= min(board[x][j-1], board[x][l+1])){
                            pos = 0;
                            break;
                        }
                    }
                    for(int y=j; y<=l; y++){
                        if(maxVal2[y][i][k] >= min(board[i-1][y], board[k+1][y])){
                            pos = 0;
                            break;
                        }
                    }
                    if(pos) ans++;
                }
            }
        }
    }

    return ans;
}
#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...