This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
typedef long long ll;
typedef pair<int,int> ii;
typedef vector<int> vi;
typedef long double ld;
typedef tree<ii, null_type, less<ii>, rb_tree_tag, tree_order_statistics_node_update> pbds;
typedef bitset<500> b100;
int a[2011][2011];
int dp[511][511][511];
ii iv[2011][2011];
int L[511][511][511];
int R[511][511][511];
int intersect(ii a, ii b)
{
int l=max(a.fi,b.fi); int r=min(a.se,b.se);
return max(0,r-l+1);
}
int biggest_stadium(int n, vector<vector<int> > F)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
a[i][j]=F[i][j]; a[i][j]=1-a[i][j];
}
}
for(int i=0;i<n;i++)
{
vector<ii> intervals;
int st=-1;
for(int j=0;j<n+1;j++)
{
if(a[i][j])
{
if(st==-1)
{
st=j;
}
//else st continues;
}
else
{
iv[i][j]={-1,-1};
if(st!=-1)
{
intervals.pb({st,j-1});
for(int k=st;k<j;k++)
{
iv[i][k]={st,j-1};
}
st=-1;
}
}
}
}
int ans=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
L[i][i][j]=(iv[i][j].fi==-1?int(1e9):iv[i][j].fi);
R[i][i][j]=iv[i][j].se;
dp[i][i][j]=max(R[i][i][j]-L[i][i][j]+1,0);
ans=max(ans,dp[i][i][j]);
//cerr<<i<<' '<<j<<' '<<L[i][i][j]<<' '<<R[i][i][j]<<' '<<dp[i][i][j]<<'\n';
}
}
for(int len=2;len<=n;len++)
{
for(int l=0;l+len-1<n;l++)
{
int r=l+len-1;
for(int j=0;j<n;j++)
{
int l1 = max(L[l+1][r][j],iv[l][j].fi);
int l2 = max(L[l][r-1][j],iv[r][j].fi);
L[l][r][j]=min(l1,l2);
int r1 = min(R[l+1][r][j],iv[l][j].se);
int r2 = min(R[l][r-1][j],iv[r][j].se);
R[l][r][j]=max(r1,r2);
dp[l][r][j]=max(dp[l+1][r][j]+intersect({L[l+1][r][j],R[l+1][r][j]},{L[l][l][j],R[l][l][j]}),
dp[l][r-1][j]+intersect({L[l][r-1][j],R[l][r-1][j]},{L[r][r][j],R[r][r][j]}));
ans=max(ans,dp[l][r][j]);
}
//L[l][r][
}
}
return ans;
}
/*
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0);
int n; cin>>n;
}
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |