Cod sursa(job #1522846)

Utilizator retarded_dolphinChivu Stefan retarded_dolphin Data 12 noiembrie 2015 00:01:51
Problema Numarare triunghiuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <iostream>
#include <fstream>


using namespace std;
ifstream in("nrtri.in");
ofstream out("nrtri.out");
int frec[30010];
int v[8010];

int j=0,mem=0;

int caut(int l,int r,int val)
{
	int mij=(l+r)/2;
	if(r==0) return 0;
	if(l==j-1) {
				if(v[j-1]>=val)return j-1;
				return j;
	}
	
	
	
	if(v[mij]>val) {  if(mij==0) return mij;
					if(v[mij-1]>=val)return caut(l,mij,val);
					
					return mij;
					
					}
						
	if(v[mij]<val) {
		if(mij==j) return mij;
		if(v[mij+1]<val) return caut(mij,r,val);
		return mij+1;
	}
	if(v[mij]==val){
		if(mij==0) return mij;
		if(v[mij-1]!=val) return mij;
		return caut(l,mij,val);
	}
	
	
	
	
	
}






int main()
{

int n,x,i;
long long int sol=0;
in>>n;
for(i=0;i<n;i++)
	{in>>x;
	frec[x]++;
	}

for(i=1;i<=3000;i++)
	{for(j=0;j<frec[i];j++)
		{
			v[mem+j]=i;
		}
	mem+=j;	
	}
for(i=n-1;i>1;i--)
	{
		for(j=i-1;v[j]>(v[i]-1)/2;j--)
			sol+=(long long int)(j-caut(0,j,v[i]-v[j]+1));
		    
		
	}

out<<sol;


return 0;
        
  
  
  
  
  
}