Pagini recente » Cod sursa (job #463076) | Cod sursa (job #554226) | Cod sursa (job #2639086) | Cod sursa (job #293867) | Cod sursa (job #983466)
Cod sursa(job #983466)
#include <iostream>
#include <fstream>
#include <cstring>
#include <string>
#include <climits>
using namespace std;
ifstream fin ("nrtri.in");
ofstream fout("nrtri.out");
#define MAX 32768
int n,A,B,a[MAX],i,j,b[MAX];
int BS(int start, int end, int x)
{
int mid;
if(a[end]<=x)
return end;
if(a[start]>x)
return start-1;
if(a[start]==x && a[start+1]!=x)
{
return start;
}
while(start<=end)
{
mid=start+(end-start)/2;
if(a[mid]<x && x<a[mid+1])
{
return mid;
}
if(a[mid]==x && a[mid+1]!=x)
{
return mid;
}
if(a[mid]==x)
{
start=mid+1;
}
else if(x<a[mid])
{
end=mid-1;
}
else
{
start=mid+1;
}
}
return start-1;
}
void sort()
{
int ok,k=0;
do
{
ok=1;
for(i=1;i<n-k;i++)
{
if(a[i]>a[i+1])
{
int t=a[i];
a[i]=a[i+1];
a[i+1]=t;
ok=0;
}
}
k++;
}while(!ok);
}
int main()
{
fin>>n;
for(i=1;i<=n;i++)
{
fin>>a[i];
}
sort();
int count=0;
cout<<BS(1,n,1);
for(i=1;i<n-1;i++)
{
for(j=i+1;j<n && a[i]+a[j]>=a[j+1];j++)
{
count+=BS(j,n,a[i]+a[j])-j;
}
}
fout<<count;
return 0;
}