Cod sursa(job #1508576)

Utilizator mariusn01Marius Nicoli mariusn01 Data 22 octombrie 2015 18:38:54
Problema Numarare triunghiuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>
#include <algorithm>

using namespace std;

int v[3010], i, j, k, sol, n, st, dr;

int main() {
    ifstream fin("nrtri.in");
    ofstream fout("nrtri.out");
    fin>>n;
    for (i=1;i<=n;i++)
        fin>>v[i];

    sort(v+1, v+n+1);

    for (i=1;i<n-1;i++)
        for (j=i+1;j<n;j++) {
            int x = v[i] + v[j];

            //intre pozitiile j+1 si n caut ultuma pozitie
            // cu valoare <= v[i] + v[j]

            // caut pe x de la pozitia j+1 pana la pozitia n
            st = j+1; dr = n;
            while (st <= dr) {
                int mid = (st + dr)/2;
                if (v[mid] > v[i] + v[j])
                    dr = mid - 1;
                else
                    st = mid + 1;

            }

            sol += dr-j;

        }

    fout<<sol;

    return 0;
}