Submission #1267481

#TimeUsernameProblemLanguageResultExecution timeMemory
1267481vukhacminhMountains (NOI20_mountains)C++20
100 / 100
120 ms9948 KiB
/** * Author : Vu Khac Minh **/ #include <bits/stdc++.h> #define ll long long using namespace std; const int maxn = 3e5 + 5; const int mod = 1e9+7; ll n,pre[maxn],suf[maxn],a[maxn],res,bit[maxn]; vector<ll> ctz; void add(int u,int v) { for(;u<=n;u+=u&-u) bit[u]+=v; } ll get(int u) { ll sum = 0; for(;u;u-=u&-u) sum+= bit[u]; return sum; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; for(int i = 1;i<=n;i++) { cin>>a[i]; ctz.push_back(a[i]); } sort(ctz.begin(),ctz.end()); ctz.erase(unique(ctz.begin(),ctz.end())); for(int i = 1;i<=n;i++) { a[i] = lower_bound(ctz.begin(),ctz.end(),a[i]) - ctz.begin()+1; pre[i] = get(a[i]-1); add(a[i],1); } memset(bit,0,sizeof bit); add(a[n],1); for(int i = n-1;i>=2;i--) { res+= pre[i]* get(a[i]-1); // cout<<i<<" "<<pre[i-1]<<" "<< get(a[i]-1)<<'\n';; add(a[i],1); } cout<<res; 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...