Pagini recente » Cod sursa (job #552228) | Cod sursa (job #3230370) | Cod sursa (job #2790407) | Cod sursa (job #3270517) | Cod sursa (job #319666)
Cod sursa(job #319666)
#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<<'\n';
g.close();
return 0;
}