Cod sursa(job #266026)

Utilizator Andrei200Andrei200 Andrei200 Data 24 februarie 2009 20:51:30
Problema Numarare triunghiuri Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <stdio.h>
#include <math.h>

int n,v[1000],i,j,x;

void qsort(long l, long r)   
{   
 long i,j,x,y;   
 i=l;   
 j=r;   
 x=v[(l+r)>>1];   
 do  
    {   
    while ((v[i]<x)&&(i<n)) ++i;   
    while ((x<v[j])&&(j>1)) --j;   
    if (i<=j)   
        {   
        y=v[i];   
        v[i]=v[j];   
        v[j]=y;   
        ++i;   
        --j;   
        }   
    }   
 while (i<=j);   
 if (l<j) qsort(l,j);   
 if (i<r) qsort(i,r);   
}   

int caut_bin(int p, int u)
{
  int m;
  m=(p+u)/2;
  while (p<=u)
  {
      if ((v[m]<=v[i]+v[j] && v[m+1]>v[i]+v[j]) || (v[m]<=v[i]+v[j] && m==n))
  return m;
  else if (v[m]<=v[i]+v[j] && v[m+1]<=v[i]+v[j]) 
  {
  p=m+1; 
  m=(p+u)/2;
  }
  else 
  {
  u=m-1; 
  m=(p+u)/2;
  }  
  }
  return 0;
}



int main()
{
    freopen("nrtri.in","r",stdin);
    freopen("nrtri.out","w",stdout);
    
    scanf("%d", &n);
    for (i=0;i<n;++i)
          scanf("%d ", &v[i]);
     
    qsort(1,n); 
    
    for (i=1;i<n-2;++i)
          for (j=i+1;j<n-1;++j)
                x=caut_bin(1,n);
    
    printf("%d ",x);
    return 0;
}