Cod sursa(job #531441)
#include <stdio.h>
#include <algorithm>
using namespace std;
int n,x[805],i,j,k,mij,st,dr,a;
bool cmp(int a,int b)
{
return a>=b;
}
int main()
{
freopen("nrtri.in","r",stdin);
freopen("nrtri.out","w",stdout);
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&k);
x[i]=k;
}
sort(x,x+n,cmp);
k=0;
for(i=0;i<n-2;i++)
{
for(j=i+1;j<n-1;j++)
{
a=x[i]+x[j];
st=j+1;
dr=n-1;
while(st<=dr)
{
mij=(st+dr)/2;
if(x[mij]<=a && x[i]<=x[j]+x[mij] && x[j]<=x[i]+x[mij])
{
k=k+mij;
st=mij+1;
}
else
{
dr=mij-1;
}
}
}
}
printf("%d",k);
return 0;
}