Pagini recente » Cod sursa (job #1122090) | Cod sursa (job #248088) | Cod sursa (job #2653388) | Cod sursa (job #1418152) | Cod sursa (job #3324394)
#include <bits/stdc++.h>
using namespace std;
int main() {
ifstream fin("nrtri.in");
ofstream fout("nrtri.out");
int N;
fin >> N;
vector<int> sticks(N);
for (int i = 0; i < N; ++i) fin >> sticks[i];
sort(sticks.begin(), sticks.end());
long long count = 0;
for (int i = 0; i < N - 2; ++i) {
for (int j = i + 1; j < N - 1; ++j) {
int sum = sticks[i] + sticks[j];
// Cautam k maxim cu sticks[k] <= sum
int left = j + 1, right = N - 1, pos = j;
while (left <= right) {
int mid = (left + right) / 2;
if (sticks[mid] <= sum) {
pos = mid;
left = mid + 1;
} else {
right = mid - 1;
}
}
count += (pos - j); // toate segmentele de la j+1 la pos
}
}
fout << count << endl;
return 0;
}