Pagini recente » Cod sursa (job #2856420) | Cod sursa (job #1792637) | Cod sursa (job #2497842) | Cod sursa (job #1361140) | Cod sursa (job #1792694)
#include <fstream>
#include <vector>
#define max(a, b) ((a) < (b) ? (b) : (a))
using namespace std;
ifstream f("nrtri.in");
ofstream g("nrtri.out");
int n;
vector<int> v;
int CautareBinara(int st, int dr, int x)
{
if (st <= dr)
{
int mij = st + (dr - st) / 2;
if (v[mij] == x)
return mij;
else if (v[mij] > x)
return CautareBinara(st, mij - 1, x);
else
return CautareBinara(mij + 1, dr, x);
}
if (dr == -1)
return st;
return dr;
}
void QuickSort(int st, int dr)
{
if (st < dr)
{
int i = st, j = dr, x = v[st];
while (i < j)
{
while (i < j && v[j] >= x)
j--;
v[i] = v[j];
while (i < j && v[i] <= x)
i++;
v[j] = v[i];
}
v[i] = x;
QuickSort(st, i - 1);
QuickSort(i + 1, dr);
}
}
int main()
{
int sum = 0;
f >> n;
v.resize(n);
for (int i = 0; i < n; ++i)
f >> v[i];
QuickSort(0, n - 1);
/*
for (int i = 0; i < n; ++i)
g << v[i] << " ";
g << endl;
*/
for (int i = 0; i < n - 1; ++i)
for (int j = i + 1; j < n; ++j)
{
int poz = CautareBinara(0, n - 1, v[i] + v[j]);
sum += max(poz - j, 0);
}
g << sum;
return 0;
}