Pagini recente » Cod sursa (job #960017) | Cod sursa (job #1762400) | Arhiva de probleme | Cod sursa (job #2132389) | Cod sursa (job #2076265)
#include <algorithm>
#include <fstream>
#include <iostream>
using namespace std;
const int MAX_N = 805;
int a[MAX_N];
int UpperBound(int left,int right,int x) {
int best = 0;
while (left <= right) {
int middle = (left + right) / 2;
if (a[middle] <= x) {
best = middle;
left = middle + 1;
} else {
right = middle - 1;
}
}
return best;
}
int main() {
ifstream cin("nrtri.in");
ofstream cout("nrtri.out");
int n;
cin >> n;
for (int i = 1; i <= n; ++ i) {
cin >> a[i];
}
sort(a + 1, a + n + 1);
int total = 0;
for(int i = 1; i <= n; ++ i) {
for(int j = i + 1; j <= n; ++ j) {
int k = UpperBound(j + 1, n, a[i] + a[j]);
if (k) {
total += k - j;
}
}
}
cout << total << "\n";
return 0;
}