Submission #1191303

#TimeUsernameProblemLanguageResultExecution timeMemory
1191303kamal1122333Mountains (NOI20_mountains)C++20
64 / 100
2095 ms12100 KiB
#include <bits/stdc++.h> #define ll long long #define pb push_back #define f first #define s second using namespace std; const ll INF=1e18+9; vector<ll> st, v; void build(ll l, ll r, ll ind){ if (l==r){ st[ind]=v[l]; return; } ll mid=(l+r)/2; build(l, mid, ind*2); build(mid+1, r, ind*2+1); st[ind]=max(st[ind*2], st[ind*2+1]); } ll say; void getans(ll l, ll r, ll ind, ll ql, ll qr, ll x){ if (ql>r or qr<l) return; if (x>st[ind] and l>=ql and r<=qr){ say+=r-l+1; return; } if (l==r) return; ll mid=(l+r)/2; getans(l, mid, ind*2, ql, qr, x); getans(mid+1, r, ind*2+1, ql, qr, x); } void solve(){ ll n; cin>>n; v.resize(n+1); st.resize(4*n+1, 0); for (int i=1; i<=n; i++){ cin>>v[i]; } build(1, n, 1); ll ans=0; for (int i=2; i<=n-1; i++){ ll cem=1; say=0; getans(1, n, 1, 1, i-1, v[i]); cem*=say; say=0; getans(1, n, 1, i+1, n, v[i]); cem*=say; ans+=cem; } cout<<ans<<endl; } int main() { ll t=1; // cin>>t; while (t--){ solve(); } 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...