Pagini recente » Cod sursa (job #3219486) | Cod sursa (job #2233015) | Cod sursa (job #774852) | Cod sursa (job #68181) | Cod sursa (job #2829575)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("nrtri.in");
ofstream cout("nrtri.out");
const int NMAX = 803;
int v[NMAX];
int main()
{
int n, i, j;
cin >> n;
for (i = 1; i <= n; i++)
cin >> v[i];
int ans = 0;
sort(v + 1, v + n + 1);
for (i = 1; i + 1 <= n; i++)
for (j = i + 1; j <= n; j++)
{
//v[i], v[j]
//v[i] + v[j] > x
// v[i] + x > v[j]; x > v[j] - v[i]
//v[j] + x > v[i]; x > v[i] - v[j]
//max(v[j] - v[i], v[i] - v[j]) < x < v[i] + v[j]
int val = max(v[j] - v[i], v[i] - v[j]); //lower_bound
int st = j + 1, dr = n, med, lft, rgh;
lft = rgh = -1;
while (st <= dr)
{
med = (st + dr) / 2;
if (v[med] >= val)
{
lft = med;
dr = med - 1;
}
else st = med + 1;
}
if (lft == -1) continue;
st = j + 1, dr = n;
while (st <= dr)
{
med = (st + dr) / 2;
if (v[med] <= v[i] + v[j])
{
rgh = med;
st = med + 1;
}
else
dr = med - 1;
}
if (rgh != -1)
ans += rgh - lft + 1;
}
cout << ans;
}