Pagini recente » Cod sursa (job #1875917) | Cod sursa (job #2232568) | Cod sursa (job #2742288) | Cod sursa (job #2770329) | Cod sursa (job #2981870)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream cin("psir.in");
ofstream cout("psir.out");
int n;
vector<int> v;
void read() {
cin>>n;
v.resize(n+1);
for(int i=1;i<=n;i++) {
cin>>v[i];
}
}
int bs_lower(int val) {
int l=1,r=n,mid,res=-1;
while(l<=r) {
mid=l+(r-l)/2;
if(v[mid]<val) {
res=mid;
l=mid+1;
}
else {
r=mid-1;
}
}
return res;
}
int bs_greater(int val) {
int l=1,r=n,mid=0,res=-1;
while(l<=r) {
mid=l+(r-l)/2;
if(v[mid]>val) {
res=mid;
r=mid-1;
}
else {
l=mid+1;
}
}
return res;
}
void solve() {
sort(v.begin()+1,v.end());
// for(int i=1;i<=n;i++) {
// cout<<v[i]<<" ";
// }
// cout<<"\n\n";
int res=((n)*(n-1))/2;
for(int i=1;i<=n;i++) {
while(i+1<=n && v[i+1]==v[i]) {
i++;
}
int lw=bs_lower(v[i]),gr=bs_greater(v[i]);
if(lw>-1 && gr>-1) {
res+=lw*(n-gr+1);
}
}
cout<<res;
}
int main() {
read();
solve();
return 0;
}