Pagini recente » Cod sursa (job #2059079) | Cod sursa (job #476487) | Cod sursa (job #2904392) | Cod sursa (job #1830428) | Cod sursa (job #1893743)
#include <iostream>
#include <algorithm>
using namespace std;
int cautBin(vector<int> &v, int left, int right, int maximum) {
if (left == right || left + 1 == right) {
return (v[right] <= maximum ? right : left);
}
int mid = (right - left) / 2 + left;
if (v[mid] > maximum) {
cautBin(v, left, mid - 1, maximum);
} else if (v[mid] < maximum) {
cautBin(v, mid, right, maximum);
} else {
return mid;
}
}
int main()
{
freopen("nrtri.in", "r", stdin);
freopen("nrtri.out", "w", stdout);
int n;
scanf("%d", &n);
vector<int> v(n);
for (int i = 0; i < n; i ++) {
scanf("%d", &v[i]);
}
sort(v.begin(), v.end());
int counter = 0;
for (int i = 0; i < n; i ++) {
for (int j = i + 1; j < n; j ++) {
if (j + 1 < n && v[j + 1] <= v[i] + v[j]) {
int x = cautBin(v, j + 1, v.size() - 1, v[i] + v[j]) - j;
counter += x;
}
}
}
printf("%d\n", counter);
return 0;
}