Pagini recente » Cod sursa (job #234340) | Cod sursa (job #154856) | Cod sursa (job #1181246) | Borderou de evaluare (job #1036963) | Cod sursa (job #1837176)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream in ("nrtri.in");
ofstream out ("nrtri.out");
vector <int> v;
int main()
{
int n ,i ,j ,mid = 0 ,a = 0 ,s = 0 ,st ,dr ;
in>>n;
v.resize(n + 1);
for(i = 1 ;i <= n ;i++){
in>>v[i];
}
sort(v.begin(),v.end());
/// v[n + 1] = 30001;
for(i = 1 ; i <= n - 2 ;i++){
for(j = i + 1 ; j <= n - 1 ;j++){
a = v[j]+v[i];
st = j + 1;
dr = n;
mid = (st+dr)/2;
//cout<<a<<" "<<v[mid]<<" ";
while(st <= dr){
if((v[mid] <= a && a < v[mid + 1] ) || (v[mid] <= a && mid == n)){
s+=(mid - j);
//cout<<v[mid]<<" "<<v[j]<<" "<<v[i]<<" "<<(mid - j);
break;
}
if(v[mid] <= a){
st = mid + 1;
}
if(a < v[mid]){
dr = mid - 1;
}
mid = (st+dr)/2;
//cout<<mid<<" ";
}
//cout<<'\n';
}
}
// cout<<":";
out<<s;
return 0;
}