This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
//IOI 2023 I am coming.
#include "bits/stdc++.h"
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#define fast ios_base::sync_with_stdio(false);cin.tie(nullptr)
#define int int64_t
#define pb push_back
#define deb(x) cerr<<"("<<#x<<"="<<x<<','<<__LINE__<<")"<<endl;
#define ordered_set tree<pair<int,int>, null_type,less<pair<int,int>>, rb_tree_tag,tree_order_statistics_node_update>
int32_t main(){
fast;
int n;
cin>>n;
vector<int>a(n);
for(int i=0;i<n;++i){
cin>>a[i];
}
ordered_set o1,o2;
//~ map<int,int>mp;
vector<int>pref(3e5+1),pref2(3e5+1);
map<int,int>mp,mp2;
for(int i=0;i<n;++i){
int dx=o1.order_of_key({a[i],i})-mp[a[i]];
pref[i]=dx;
o1.insert({a[i],i});
mp[a[i]]+=1;
}
//~ map<int,int>mp2;
for(int i=n-1;i>=0;--i){
int dx=o2.order_of_key({a[i],-i})-mp2[a[i]];
pref2[i]=dx;
o2.insert({a[i],-i});
mp2[a[i]]+=1;
}
int ans=0;
for(int i=0;i<n;++i){
//~ deb(pref[i]);
//~ deb(pref2[i]);
ans+=(pref[i]*pref2[i]);
}
cout<<ans<<"\n";
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |