Submission #1020580

#TimeUsernameProblemLanguageResultExecution timeMemory
1020580lamagrilMountains (NOI20_mountains)C++14
100 / 100
172 ms29484 KiB
#include <bits/stdc++.h> #define int long long using namespace std; const int N=3e5+5; vector<int> v(N); vector<int> f[N]; struct fenwick{ int d[N]; void update(int idx,int vl){ while(idx<N){ d[idx]+=vl; idx+=idx&(-idx); } } int query(int idx){ int sm=0; while(idx>0){ sm+=d[idx]; idx-=(idx&-idx); } return sm; } } fe; int32_t main(){ cin.tie(NULL)->sync_with_stdio(false); int ans=0; int n; cin >> n; vector<int> a; for(int i=1 ; i<=n ; i++){ fe.update(i,1); } for(int i=1 ; i<=n ; i++) cin >> v[i],a.push_back(v[i]); sort(a.begin(),a.end()); for(int i=1 ; i<=n ; i++){ v[i]=lower_bound(a.begin(),a.end(),v[i])-a.begin()+1; } for(int i=1 ; i<=n ; i++){ f[v[i]].push_back(i); } for(int i=n ; i>=1 ; i--){ if(f[i].empty()) continue; for(int j:f[i]){ fe.update(j,-1); } for(int j:f[i]){ ans+=fe.query(j)*(fe.query(n)-fe.query(j)); } } cout << ans << '\n'; }
#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...