Pagini recente » Cod sursa (job #1681869) | Cod sursa (job #307851) | Cod sursa (job #1573464) | Cod sursa (job #872543) | Cod sursa (job #792255)
Cod sursa(job #792255)
#include <cstdio>
#include <vector>
using std::vector;
int n;
vector<int> v;
int nrtri=0;
void citire() {
int x, k;
scanf("%d\n", &n);
for (int i=0; i<n; ++i) {
scanf("%d ",&x);
for (k=i; k>0 && x<v[k-1]; --k);
v.insert(v.begin()+k, x);
}
}
int bs (int a, int b) {
int l = n-b, val = v[a]+v[b];
int i, step;
for (step = 1; step<l; step<<=1);
for (i=b+1; step; step>>=1)
if (i+step<n && v[i+step]<=val)
i+=step;
if (v[i]>val)
return b;
return i;
}
void numarare() {
for (int i=0; i<n-2; ++i)
for (int j=i+1; j<n-1; ++j)
nrtri += bs(i,j)-j;
}
int main () {
freopen("nrtri.in","rt",stdin);
freopen("nrtri.out","wt",stdout);
citire();
numarare();
printf("%d",nrtri);
return 0;
}