Cod sursa(job #1526536)

Utilizator ManDark97Melinte Tudor-Matei ManDark97 Data 16 noiembrie 2015 20:37:19
Problema Numarare triunghiuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <iostream>
#include<fstream>
#include<algorithm>
using namespace std;
ifstream in("nrtri.in");
ofstream out("nrtri.out");
int v[801],n,i,j,s;
void qs(int st,int dr)
{
    int i=st,j=dr;
    int pivot=v[(st+dr)/2];
    while(i<=j)
    {
        while(v[i]<pivot)i++;
        while(v[j]>pivot)j--;
        if(i<=j)
            v[i]=v[i]+v[j]-(v[j]=v[i]),i++,j--;
    }
    if(st<j)
        qs(st,j);
    if(i<dr)
        qs(i,dr);
}
int cautarebinara(int st,int dr)
{
    if(st>dr)
        return -1;
    int mij=(st+dr)/2;
    if(v[mij]<=(v[i]+v[j]) && dr-st==0)
    return mij;
        if(v[mij+1]<=(v[i]+v[j]))
        return cautarebinara(mij+1,dr);
        if(v[mij]>(v[i]+v[j]))
        return cautarebinara(st,mij-1);
    return mij;
}
int main()
{
    in>>n;
    int k;
    for(i=0;i<n;i++)
        in>>v[i];
   // sort(v+1,v+n+1);
    qs(0,n-1);
    for(i=0;i<n;i++)cout<<v[i]<<" ";    cout<<endl;
    for(i=0;i<n-2;i++)
        for(j=i+1;j<n-1;j++)
            if(cautarebinara(j+1,n-1)!=-1)
                s+=cautarebinara(j+1,n-1)-j;
    out<<s;

    return 0;
}