Pagini recente » Cod sursa (job #338814) | Cod sursa (job #402318) | Cod sursa (job #694141) | Cod sursa (job #307567) | Cod sursa (job #1526536)
#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;
}