Cod sursa(job #3204095)

Utilizator Bogdan345Marius Mihalache Bogdan345 Data 15 februarie 2024 17:37:16
Problema Numarare triunghiuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
/*#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream cin("nrtri.in");
ofstream cout("nrtri.out");
vector<int>v;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
cin>>n;
v.resize(n+1);
for(int i=1;i<=n;i++){
    cin>>v[i];
}
sort(v.begin()+1,v.end());

int nr1,nr2,nr3;
int cont=0;
for(int i=1;i<=n-2;i++){
    nr1=i;
    for(int j=i+1;j<=n-1;j++){
        nr2=j;
        nr3=j+1;
        while(nr3<n && v[nr3]<=v[nr1]+v[nr2]){
            nr3+=1;
        }
        cont+=nr3-nr2-(v[nr3]>v[nr1]+v[nr2]);

    }
}
cout<<cont;
}
*/
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream cin("nrtri.in");
ofstream cout("nrtri.out");
vector<int>v;
int cautBinar(int st,int dr,int nr1,int nr2){
    int rasp=st*(v[st]<=v[nr1]+v[nr2])+nr2*!(v[st]<=v[nr1]+v[nr2]);
    while(st<=dr){
        int mij=(st+dr)/2;
        if(v[mij]>v[nr1]+v[nr2]){
            dr=mij-1;
        }else{
            rasp=mij;
            st=mij+1;
        }

    }
    return rasp;
}
int main(){
cin.tie(0);
cout.tie(0);
int n;
cin>>n;
v.resize(n+1);
for(int i=1;i<=n;i++){
    cin>>v[i];
}
sort(v.begin()+1,v.end());

int nr1,nr2,nr3;
int cont=0;
for(int i=1;i<=n-2;i++){
    for(int j=i+1;j<=n-1;j++){
        nr3=cautBinar(j+1,n,i,j);
        cont+=nr3-j;

    }
}
cout<<cont;
}