Submission #209413

#TimeUsernameProblemLanguageResultExecution timeMemory
209413model_codeMountains (NOI20_mountains)C++17
100 / 100
111 ms6264 KiB
#include <bits/stdc++.h> using namespace std; constexpr int MAXN=300'000; int n; struct { int data_[MAXN+1]; int query(int index){ int ret=0; for(;index>0;index-=(index&-index)){ ret+=data_[index]; } return ret; } void update(int index){ for(++index;index<=n;index+=(index&-index)){ ++data_[index]; } } } fw; pair<long long, int> arr[MAXN]; int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cin>>n; assert(3<=n&&n<=MAXN); for(int i=0;i<n;++i){ cin>>arr[i].first; assert(0<=arr[i].first&&arr[i].first<=1'000'000'000'000'000'000ll); arr[i].second=i; } sort(arr,arr+n,[](const pair<long long, int>& a, const pair<long long, int>& b){ return a.first<b.first; }); long long ans=0; for(int i=0;i<n;){ const long long val=arr[i].first; int j; for(j=i;j<n&&arr[j].first==val;++j){ const int idx=arr[j].second; const int tmp=fw.query(idx); ans+=tmp*static_cast<long long>(i-tmp); } for(;i<j;++i){ const int idx=arr[i].second; fw.update(idx); } } 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...