Pagini recente » Cod sursa (job #2591269) | Cod sursa (job #2327136) | Cod sursa (job #238080) | Cod sursa (job #2069980) | Cod sursa (job #990985)
Cod sursa(job #990985)
// fac eu sortarea
#include <cstdio>
#include <algorithm>
using namespace std;
int a[801];
int n;
int result;
void read() {
freopen ("nrtri.in", "r", stdin);
scanf ("%d", &n);
for (int i = 1; i <= n; ++i)
scanf ("%d", &a[i]);
}
void solve() {
sort(a + 1, a + n + 1);
int i, j, k;
// continua tu
for(i = 1; i <= n; ++i)
for(j = i + 1; j <= n; ++j) {
// cauti binar pe k
int left = i + 1, right = n, middle;
while (left <= right) {
//printf ("%d %d\n", left, right);
middle = (left + right) / 2;
if (left + 1 == right) {
if (a[i] + a[j] >= a[right])
middle = right;
else
middle = left;
break;
}
if (left == right) {
middle = left;
break;
}
if (a[i] + a[j] >= a[middle]) // respecta conditia
left = middle; // ne ducem in dreapta
else
right = middle - 1;
}
if (a[i] + a[j] >= a[middle])
result += middle - j;//?da, dar nu aici e problema
// el ruleaza la infinit in while
}
}//bun?da
int main() {
read();
solve();
freopen("nrtri.out","w",stdout);
printf("%d ",result);
}