Submission #762114

#TimeUsernameProblemLanguageResultExecution timeMemory
762114alexander707070Rectangles (IOI19_rect)C++14
49 / 100
3306 ms1048576 KiB
#include<bits/stdc++.h> #define MAXN 707 using namespace std; int n,m,pr[MAXN][MAXN],nxt[MAXN][MAXN]; int a[MAXN][MAXN],last,ans; int maxs[MAXN]; short pref[MAXN][MAXN][MAXN]; bool eq[MAXN][MAXN]; long long count_rectangles(vector< vector<int> > A){ n=int(A.size()); m=int(A[0].size()); for(int i=1;i<=n;i++){ for(int f=1;f<=m;f++){ a[i][f]=A[i-1][f-1]; } } for(int i=1;i<=n;i++){ for(int f=1;f<=m;f++){ for(int k=f;k<=m;k++){ pref[i][f][k]=pref[i-1][f][k]; } } for(int f=2;f<=m-1;f++){ pr[i][f]=0; nxt[i][f]=m+1; for(int k=f-1;k>=1;k--){ if(a[i][k]==a[i][f])eq[i][f]=true; if(a[i][k]>a[i][f]){pr[i][f]=k;break;} } for(int k=f+1;k<=m;k++){ if(a[i][k]>a[i][f]){nxt[i][f]=k;break;} } pref[i][pr[i][f]][nxt[i][f]]=pref[i-1][pr[i][f]][nxt[i][f]]+1; } } for(int i=2;i<=n-1;i++){ for(int f=1;f<=m;f++)maxs[f]=a[i][f]; for(int f=i;f<=n-1;f++){ last=2; for(int k=2;k<=m-1;k++){ maxs[k]=max(maxs[k],a[f][k]); if(maxs[k]<a[i-1][k] and maxs[k]<a[f+1][k])continue; for(int p=last;p<=k-1;p++){ if(pr[f][p]+1<last or nxt[f][p]-1>k-1)continue; if(!eq[f][p] and pref[f][pr[f][p]][nxt[f][p]] - pref[i-1][pr[f][p]][nxt[f][p]] == f-i+1)ans++; } last=k+1; } for(int p=last;p<=m-1;p++){ if(pr[f][p]+1<last or nxt[f][p]-1>m-1)continue; if(!eq[f][p] and pref[f][pr[f][p]][nxt[f][p]] - pref[i-1][pr[f][p]][nxt[f][p]] == f-i+1)ans++; } } } return ans; } /* int main(){ cout<<count_rectangles({{4, 8, 7, 5, 6}, {7, 4, 10, 3, 5}, {9, 7, 20, 14, 2}, {9, 14, 7, 3, 6}, {5, 7, 5, 2, 7}, {4, 5, 13, 5, 6}})<<"\n"; return 0; } */
#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...