제출 #1126397

#제출 시각아이디문제언어결과실행 시간메모리
1126397brover29호화 벙커 (IZhO13_burrow)C++17
100 / 100
1291 ms24092 KiB
#include <bits/stdc++.h> //qwerty47924692 using namespace std; using ll = long long; const ll N=1005; const string br="617283"; ll n,m,k,a[N][N],b[N][N],l[N],r[N],pref[N][N],c[N],st[N]; ll solvek(ll x){ for(ll i=1;i<=n;i++){ for(ll j=1;j<=m;j++){ b[i][j]=(a[i][j]>=x); pref[i][j]=pref[i-1][j]+b[i][j]; } } ll ans=0; for(ll i=1;i<=n;i++){ for(ll j=1;j<=m;j++){ ll l=i-1,r=n; while(l<r){ ll mid=(r+l+1)>>1; if(pref[mid][j]-pref[i-1][j]==mid-i+1)l=mid; else r=mid-1; } c[j]=l-i+1; } ll sz=0; st[sz]=0; for(ll j=1;j<=m;j++){ while(sz&&c[j]<=c[st[sz]]){ sz--; } l[j]=st[sz]; st[++sz]=j; } sz=0; st[sz]=m+1; for(ll j=m;j>=1;j--){ while(sz&&c[j]<c[st[sz]]){ sz--; } r[j]=st[sz]; st[++sz]=j; } for(ll j=1;j<=m;j++){ ans=max(ans,((r[j]-1)-(l[j]+1)+1)*c[j]); // cout<<l[j]<<' '<<r[j]<<'\n'; } } return ans; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin>>n>>m>>k; for(ll i=1;i<=n;i++){ for(ll j=1;j<=m;j++){ cin>>a[i][j]; } } ll l=1,r=1e9; while(l<r){ ll mid=(r+l+1)>>1; if(solvek(mid)>=k)l=mid; else r=mid-1; //cout<<l<<' '<<r<<' '<<bool(check(mid))<<'\n'; } cout<<r<<' '<<solvek(r); }
#Verdict Execution timeMemoryGrader output
Fetching results...