Submission #204399

#TimeUsernameProblemLanguageResultExecution timeMemory
204399ADJARectangles (IOI19_rect)C++14
37 / 100
5070 ms46968 KiB
#include "rect.h" #include <iostream> #include <cstdio> #include <cstdlib> #include <vector> #include <set> #include <map> #include <algorithm> #include <bitset> #include <cmath> #include <queue> #include <stack> #include <string> #define sz(x) (int) x.size() #define all(x) x.begin(), x.end() using namespace std; const int MAXN = 2500; int n, m; int a[MAXN][MAXN]; int ok[MAXN][MAXN]; int mxc[MAXN]; long long count_rectangles(std::vector<std::vector<int> > A) { n = sz(A); m = sz(A[0]); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { a[i][j] = A[i][j]; } } long long ans = 0; for (int col = 0; col + 1 < m; col++) { for (int i = 0; i < n; i++) { for (int j = col; j < m; j++) { ok[i][j] = 0; } } for (int i = 0; i < n; i++) { int mx = -1; for (int j = col + 1; j < m; j++) { if (a[i][col] > mx && a[i][j] > mx) { ok[i][j] = 1; } if (a[i][j] > mx) { mx = a[i][j]; } } } for (int i = 0; i < n; i++) { for (int j = col + 1; j < m; j++) { if (ok[i][j]) { ok[i][j] = 1 + ok[i - 1][j]; } } } for (int row = 0; row + 1 < n; row++) { for (int j = col + 1; j < m; j++) { mxc[j] = -1; } for (int row2 = row + 1; row2 < n; row2++) { bool good = true; for (int col2 = col + 1; col2 + 1 < m; col2++) { if (!(a[row][col2] > mxc[col2] && a[row2][col2] > mxc[col2])) { good = false; } if (good && row2 - 1 > row && ok[row2 - 1][col2 + 1] >= row2 - row - 1) { ans++; } if (a[row2][col2] > mxc[col2]) { mxc[col2] = a[row2][col2]; } } } } } 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...