Cod sursa(job #477057)

Utilizator andrey932Andrei andrey932 Data 13 august 2010 11:46:55
Problema Numarare triunghiuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
#define MAXN 802
#define LMAX 30002

ifstream fin("nrtri.in");
ofstream fout("nrtri.out");
int x[MAXN],n,i,j,k,tot,ms,md,mi,mic,mare,st,dr;

int main()
{
	fin>>n;
	for(i=1;i<=n;i++) fin>>x[i];
	sort(&x[1],&x[n+1]);
	for(i=1;i<n;i++) {
		for(j=i+1;j<=n;j++) {
			mare=x[i]+x[j];			
			ms=j+1; md=n;			
			while (ms+1<md) {
				mi=(ms+md)>>1;
				if (x[mi]<mare) {
					ms=mi;
				}
				else if (mare<x[mi]) {
					md=mi;
				}
				else break;
			}
			dr=mi;
			while (x[dr]<=mare&&dr<=n) {dr++;} dr--;
			if (x[dr]<=mare&&dr>j) {
				tot+=dr-j;
			}
			
		}
	}
	fout<<tot<<"\n";
	fout.close();	
	return 0;
}