Submission #762206

#TimeUsernameProblemLanguageResultExecution timeMemory
762206alexander707070Rectangles (IOI19_rect)C++14
49 / 100
3403 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++;
            }
 
        }
    }

    if(ans>4*n*m)cout<<1/0;
    
    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;
}
*/

Compilation message (stderr)

rect.cpp: In function 'long long int count_rectangles(std::vector<std::vector<int> >)':
rect.cpp:67:25: warning: division by zero [-Wdiv-by-zero]
   67 |     if(ans>4*n*m)cout<<1/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...