Cod sursa(job #792255)

Utilizator gallexdAlex Gabor gallexd Data 26 septembrie 2012 20:03:48
Problema Numarare triunghiuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#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;
}