제출 #1290748

#제출 시각아이디문제언어결과실행 시간메모리
1290748SofiatpcRectangles (IOI19_rect)C++20
59 / 100
5092 ms71124 KiB
#include "rect.h" #include <bits/stdc++.h> using namespace std; const int MAXN = 2505; int mxl[MAXN][MAXN], mxr[MAXN][MAXN], mxu[MAXN][MAXN], mxd[MAXN][MAXN]; long long count_rectangles(vector<vector<int> > a) { int n = a.size(), m = a[0].size(); for(int i = 1; i <= n; i++){ for(int j = 1; j <= m; j++){ mxl[i][j] = 1; for(int k = j-1; k >= 1; k--) if(a[i-1][k-1] >= a[i-1][j-1]){mxl[i][j] = k+1; break;} mxr[i][j] = m; for(int k = j+1; k <= m; k++) if(a[i-1][k-1] >= a[i-1][j-1]){mxr[i][j] = k-1; break;} mxu[i][j] = 1; for(int k = i-1; k >= 1; k--) if(a[k-1][j-1] >= a[i-1][j-1]){mxu[i][j] = k+1; break;} mxd[i][j] = n; for(int k = i+1; k <= n; k++) if(a[k-1][j-1] >= a[i-1][j-1]){mxd[i][j] = k-1; break;} } } long long ans = 0; for(int i1 = 2; i1 < n; i1++){ for(int j1 = 2; j1 < m; j1++){ int ej = m; for(int i2 = i1; i2 < n; i2++){ ej = min(ej, mxr[i2][j1-1]); for(int j2 = j1; j2 <= min(m-1,ej); j2++){ if(mxd[i1-1][j2] < i2 || mxu[i2+1][j2] > i1)break; long long aux = 1; for(int i = i1; i <= i2; i++) if(mxl[i][j2+1] > j1){aux = 0; break;} ans += aux; } } } } 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...