Submission #445821

#TimeUsernameProblemLanguageResultExecution timeMemory
445821Jasiekstrz3D Histogram (COCI20_histogram)C++17
0 / 110
2 ms432 KiB
#include<bits/stdc++.h> #define fi first #define se second using namespace std; const int N=2e5; const int PP=27e4; const int INF=1e9+7; int a[N+10]; int b[N+10]; pair<int,int> ea[N+10]; pair<int,int> eb[N+10]; int pot; pair<int,int> tree[2*PP+10]; pair<int,int> min_pair(pair<int,int> x,pair<int,int> y) { return {min(x.fi,y.fi),min(x.se,y.se)}; } pair<int,int> read(int l,int r) { pair<int,int> ans={INF,INF}; for(l+=pot-1,r+=pot-1;l<=r;l/=2,r/=2) { if(l%2==1) ans=min_pair(ans,tree[l++]); if(r%2==0) ans=min_pair(ans,tree[r--]); } return ans; } long long ans=0; void f(int l,int r) { auto tmp=read(l,r); ans=max(ans,((long long)r-l+1)*tmp.fi*tmp.se); return; } void solve(int t[],pair<int,int> e[],int n) { t[0]=t[n+1]=0; vector<int> st={0}; for(int i=1;i<=n+1;i++) { while(t[st.back()]>t[i]) { e[st.back()].se=i; st.pop_back(); } if(t[st.back()]<t[i]) e[i].fi=st.back(); else e[i].fi=e[st.back()].fi; st.push_back(i); } return; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]>>b[i]; solve(a,ea,n); solve(b,eb,n); for(pot=1;pot<n;pot*=2); for(int i=1;i<=n;i++) tree[pot+i-1]={a[i],b[i]}; for(int i=pot-1;i>=1;i--) tree[i]=min_pair(tree[2*i],tree[2*i+1]); for(int i=1;i<=n;i++) { f(ea[i].fi+1,i-1); f(eb[i].fi+1,i-1); f(i+1,ea[i].se-1); f(i+1,eb[i].se-1); } cout<<ans<<"\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...