Pagini recente » Cod sursa (job #3245413) | Cod sursa (job #3277510) | Borderou de evaluare (job #1569559) | Borderou de evaluare (job #2746886) | Cod sursa (job #1504723)
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
const int NMAX=802;
int v[NMAX];
void sortare(int st,int dr)
{
if(st==dr)
return;
int i=st,j=dr,aux,piv=v[(st+dr)>>1];
while(i<=j)
{
while(v[i]<piv) ++i;
while(v[j]>piv) --j;
if(i<=j)
{
aux=v[i];
v[i]=v[j];
v[j]=aux;
++i;
--j;
}
}
if(st<j)sortare(st,j);
if(dr>i)sortare(i,dr);
}
int main()
{
ifstream si;
si.open("nrtri.in");
ofstream so;
so.open("nrtri.out");
int n;
si>>n;
int i;
for(i=0;i<n;++i)
si>>v[i];
sortare(0,n-1);
//sort(v,v+n);
int j,val,st,dr,mij,poz,sum=0;
for(i=0;i<n-2;++i)
{
for(j=i+1;j<n-1;++j)
{
val=v[i]+v[j];
if(val>=v[j+1])
{
st=j+1;
dr=n-1;
poz=j+1;
while(st<=dr)
{
mij=(st+dr)>>1;
if(val>=v[mij])
{
poz=mij;
st=mij+1;
}
else
{
dr=mij-1;
}
}
//cout<<v[i]<<' '<<v[j]<<' '<<v[poz]<<'\n';
sum+=poz-j;
}
}
}
so<<sum<<'\n';
so.close();
si.close();
return 0;
}