Pagini recente » Monitorul de evaluare | Cod sursa (job #2273048) | Cod sursa (job #1678614) | Cod sursa (job #1773992) | Cod sursa (job #2155481)
#include<cstdio>
#include<algorithm>
using namespace std;
long long aib[30005],v[805],f[30005];
long long update(long long nr){
long long i;
for(i=nr;i<=30000;i=i+(i&(-i)))
aib[i]++;}
long long query(long long nr){
long long i,s=0;
for(i=nr;i>0;i=i-(i&(-i)))
s=s+aib[i];
return s;}
int main(){
freopen("nrtri.in","r",stdin);
freopen("nrtri.out","w",stdout);
long long n,i,j,u;
long long rasp=0;
scanf("%lld",&n);
for(i=1;i<=n;i++)
scanf("%lld",&v[i]),f[v[i]]++;
sort(v+1,v+n+1);
for(i=1;i<=n;i++)
update(v[i]);
u=1;
for(i=2;i<=n;i++)
if (v[i]!=v[i-1])
v[++u]=v[i];
n=u;
for(i=1;i<=n;i++)
for(j=i;j<=n;j++)
if (v[i]!=v[j]){
rasp=rasp+(query(v[i]+v[j])-query(v[j]))*f[v[i]]*f[v[j]];
rasp=rasp+f[v[i]]*f[v[j]]*(f[v[j]]-1)/2;}
else
if (f[v[i]]>=2){
rasp=rasp+(query(v[i]+v[j])-query(v[j]))*f[v[i]]*(f[v[i]]-1)/2;
rasp=rasp+f[v[i]]*(f[v[i]]-1)*(f[v[i]]-2)/6;}
printf("%lld\n",rasp);
return 0;}