Submission #285512

#TimeUsernameProblemLanguageResultExecution timeMemory
285512lukameladzeMountains (NOI20_mountains)C++14
6 / 100
490 ms15284 KiB
# include <bits/stdc++.h> using namespace std; long long tree[1000005],j,n,ans,x,y,id,fix[300005],raod; pair <long long , long long > a[300005]; void inc(int idx, int val) { for (int i=idx; i<=n; i+=i&(-i)) { tree[i]+=val; } } long long getans (int idx) { long long pas=0; for (int i=idx; i>0; i-=i&(-i)) { pas+=tree[i]; } return pas; } int main() { cin>>n; for (int i=1; i<=n; i++) { cin>>a[i].first; a[i].second=i; } sort(a+1,a+n+1); for (int i=1; i<=n; i++) { if(a[i].first!=a[i-1].first) fix[a[i].second]=1;//cout<<i<<" "; } // cout<<endl; inc(a[1].second,1); for (int i=2; i<=n; i++) { if (fix[a[i].second]==1) { j=i; break;} inc(a[i].second,1); } for (int i=j; i<=n; i++) { raod++; id=a[i].second; x=getans(id-1); y=getans(n)-getans(id); // cout<<id<<" "<<x<<" "<<y<<" "<<x*y<<endl; ans+=x*y; if (fix[a[i+1].second]==1) { inc(a[i].second,raod); raod=0; } } cout<<ans<<endl; }
#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...