Pagini recente » Cod sursa (job #1685221) | Cod sursa (job #462668) | Cod sursa (job #2860642) | Cod sursa (job #1515889) | Cod sursa (job #1568504)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("nrtri.in");
ofstream g("nrtri.out");
int n, v[30001], S, m, gasit;
void caut(int s, int d)
{
if(s>d) return;
m=(s+d)/2;
if(v[m]<S && (m==n || v[m+1]>=S)) gasit=1;
else
{
if(v[m]>=S) caut(s,m-1);
else caut(m+1,d);
}
}
void QUICKSORT(int inf, int sup)
{
int x, i, j, t;
i=inf;
j=sup;
x=v[(i+j)/2];
do
{
while((i<sup)&&(v[i]<x)) i++;
while((j>inf)&&(v[j]>x)) j--;
if(i<=j)
{
t=v[i];
v[i]=v[j];
v[j]=t;
i++;
j--;
}
}
while(i<=j);
if(inf< j) QUICKSORT(inf,j);
if(i<sup) QUICKSORT(i,sup);
}
int main()
{
int i,j,y=0;
f>>n;
for(i=1; i<=n; i++) f>>v[i];
QUICKSORT(1,n);
for(i=1; i<=n-2; i++)
for(j=i+1; j<=n-1; j++)
{
S=v[i]+v[j];
if(S>v[n]) {y=y+n-j; continue;}
if(S>v[j+1])
{
gasit=0;
caut(j+1,n);
if(gasit==1) y=y+m-j;
}
}
g<<y;
return 0;
}