Cod sursa(job #319665)

Utilizator ionicaion ionica Data 1 iunie 2009 19:13:28
Problema Numarare triunghiuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream.h>
long a[801];
void part(int st, int dr, int &m){
	long p,aux;
	long s,d;
	p=a[st];
	s=st;
	d=dr;
	while(s<d){
		while(s<=dr&&a[s]<=p) s++;
		while(d>=st&&a[d]>p)  d--;
			if(s<d){
				aux=a[s];
				a[s]=a[d];
				a[d]=aux;
			}
	}
	m=d;
	aux=a[st];
	a[st]=a[m];
	a[m]=aux;
}
void quick(int st, int dr){
	int m;
	if(dr>st){
		part(st,dr,m);
		if(st<m-1) quick(st,m-1);
		if(m+1<dr) quick(m+1,dr);
	}
}


int main()
{
int n,i;
ifstream f("nrtri.in");
ofstream g("nrtri.out");
f>>n;
for(i=1;i<=n;i++)f>>a[i];
quick(1,n);
long nr=0,u;
int j,st,dr,m;
for(i=1;i<n;i++)
 for(j=i+1;j<=n;j++)
  {u=a[i]+a[j];
   if(u>=a[n])nr=nr+n-j;
   else {st=j;dr=n;
	 do{
	    m=(st+dr)/2;
	    if(a[m]>u)dr=m;
	    else st=m;
	    }while(dr-st>1);
	 nr=nr+dr-1-j;
	 }
   }
  g<<nr<<endl;
  g.close();
  }