Submission #348018

#TimeUsernameProblemLanguageResultExecution timeMemory
348018tengiz05Rectangles (IOI19_rect)C++17
15 / 100
5052 ms69100 KiB
#include "rect.h" #ifndef EVAL #include "grader.cpp" #endif #include <bits/stdc++.h> #pragma GCC optimize("unroll-loops") #pragma GCC optimize("Ofast") #pragma GCC target("avx,avx2,fma") #pragma GCC optimize("O3") using namespace std; typedef long long ll; const int N = 2505; int n, m, tr[N][N], tc[N][N]; vector<vector<int>> a; inline bool check(int r1, int c1, int r2, int c2){ int l, r; for(int i=r1;i<=r2;i++){ int t = min(a[i][c1-1], a[i][c2+1]); l=c1+m,r=c2+m; int res=0; for(;l<=r;l>>=1,r>>=1){ if((l&1))res=max(res,tr[i][l++]); if(!(r&1))res=max(res,tr[i][r--]); } if(res >= t)return false; } for(int i=c1;i<=c2;i++){ int t = min(a[r1-1][i], a[r2+1][i]); l=r1+n,r=r2+n; int res=0; for(;l<=r;l>>=1,r>>=1){ if((l&1))res=max(res,tc[i][l++]); if(!(r&1))res=max(res,tc[i][r--]); } if(res >= t)return false; } return true; } ll count_rectangles(vector<vector<int>> a){ ::a = a; n = a.size(); m = a[0].size(); for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ tr[i][j+m] = a[i][j]; }for(int j=m-1;j>0;j--){ tr[i][j] = max(tr[i][j<<1],tr[i][j<<1|1]); } } for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ tc[i][j+n] = a[j][i]; }for(int j=n-1;j>0;j--){ tc[i][j] = max(tc[i][j<<1],tc[i][j<<1|1]); } } ll ans = 0; for(int i=1;i<n-1;i++){ for(int j=1;j<m-1;j++){ for(int I=i;I<n-1;I++){ for(int J=j;J<m-1;J++){ ans += check(i,j,I,J); } } } }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...