Submission #1268387

#TimeUsernameProblemLanguageResultExecution timeMemory
1268387aryanMountains (NOI20_mountains)C++20
100 / 100
795 ms26252 KiB
#include<bits/stdc++.h> using namespace std; using i64 = long long; template <class T> struct fenwick{ int N; vector<T> tree; fenwick(int _n){ N = _n; tree = vector<T>(N + 1); } void update(int i,T v){ for(++ i;i <= N;i += (i & -i)){ tree[i] += v; } } T query(int i){ T val = 0; for(++ i;i > 0;i -= (i & -i)){ val += tree[i]; } return val; } }; int main(){ int n; cin >> n; vector<i64> h(n); for(i64 &e : h) cin >> e; vector<int> ind(n); iota(ind.begin(),ind.end(),0); sort(ind.begin(),ind.end(),[&](int i,int j){ return h[i] < h[j]; }); map<i64,int> mp; for(int i = 0;i < n;i++){ mp[h[ind[i]]] = i; } vector<i64> ans(n,0); for(int p = 0;p <= 1;p++){ fenwick<int> fen(n); for(int i = 0;i < n;i++){ fen.update(mp[h[i]],1); int tot = fen.query(mp[h[i]] - 1); if(p == 0) ans[i] = tot; if(p == 1) ans[n - i - 1] = (ans[n - i - 1] * 1LL * tot); } reverse(h.begin(),h.end()); } i64 tot = 0; for(int i = 0;i < n;i++){ tot += ans[i]; } cout << tot << '\n'; 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...