Pagini recente » Cod sursa (job #2793493) | Cod sursa (job #3145240) | Cod sursa (job #2695824) | Cod sursa (job #973496) | Cod sursa (job #988570)
Cod sursa(job #988570)
#include <iostream>
#include <stdio.h>
#include <algorithm>
#define MAX_N 801
using namespace std;
int v[MAX_N], n;
void citire_si_sortare()
{
freopen("nrtri.in","r",stdin);
scanf("%d",&n);
int i;
for(i=1; i<=n; i++) scanf("%d",&v[i]);
sort(v+1,v+n+1);
//for(i=1; i<=n; i++) printf("%d ", v[i]);
}
int caut_binar(int left, int right, int value,int answer)//caut binar pozitia maxima pe care o poate avea latura 3 in vectorul v
{
if(left<=right)
{
int k=(left+right)/2;
if(v[k]<=value)
{
//cout<<v[k]<<endl;
answer=max(answer,k);
caut_binar(k+1,right,value,answer);
}
else caut_binar(left,k-1,value,answer);
}
else return answer;
}
int solve()
{
int i,j,aux,solutie=0;
for(i=1; i<=n-2; i++)
for(j=i+1; j<=n-1; j++)
{
aux=caut_binar(j+1,n,v[i]+v[j],j);
//cout<<i<<' '<<j<<' '<<aux<<endl;
solutie+=(aux-j);
}
return solutie;
}
int main()
{
freopen("nrtri.out","w",stdout);
citire_si_sortare();
printf("%d",solve());
return 0;
}