Pagini recente » Cod sursa (job #210745) | Cod sursa (job #2694840) | Cod sursa (job #253464) | Cod sursa (job #1281728) | Cod sursa (job #273609)
Cod sursa(job #273609)
#include <iostream>
#define NMAX 2150
using namespace std;
struct carnat{
long long t, p;
};
carnat a[NMAX], b[NMAX];
FILE *f = fopen("carnati.in", "r"), *g = fopen("carnati.out", "w");
long long N, C, vector[NMAX], v[NMAX];
int swap(int a, int b)
{
int aux = v[a];
v[a] = v[b];
v[b] = aux;
return 0;
}
int addHeap(int k)
{
v[k] = k;
while (a[v[k]].p < a[v[(k - 1) / 2]].p)
{
swap(k, (k - 1) / 2);
k = (k - 1) / 2;
}
return 0;
}
int delHeap(int k)
{
b[k].p = a[v[0]].p;
b[k].t = a[v[0]].t;
v[0] = v[N - k - 1];
int i = 0;
while ((2 * i + 2 <= N - k - 2) && ((a[v[i]].p > a[v[2 * i + 1]].p) || (a[v[i]].p > a[v[2 * i + 2]].p)))
{
if ((a[v[i]].p > a[v[2 * i + 1]].p) && (a[v[i]].p > a[v[2 * i + 2]].p))
{
if (a[v[2 * i + 1]].p > a[v[2 * i + 2]].p)
{
swap(2 * i + 2, i);
i = 2 * i + 2;
}
else
{
swap(2 * i + 1, i);
i = 2 * i + 1;
}
}
else
{
if (a[v[i]].p > a[v[2 * i + 1]].p)
{
swap(2 * i + 1, i);
i = 2 * i + 1;
}
else
{
swap(2 * i + 2, i);
i = 2 * i + 2;
}
}
}
if ((2 * i + 1 <= N - k - 2) && (a[v[i]].p > a[v[2 * i + 1]].p))
{
swap(2 * i + 1, i);
}
return 0;
}
long long maxim(long long a, long long b)
{
if (a < b)
return b;
return a;
}
int main()
{
fscanf(f, "%lld %lld", &N, &C);
for (int i = 0; i < N; ++i)
{
fscanf(f, "%lld %lld", &a[i].p, &a[i].t);
addHeap(i);
}
fclose(f);
for (int i = 0; i < N; ++i)
{
delHeap(i);
}
long long max = 0;
for (int i = 0; i < N; ++i)
{
//pretul stabilit este b[i].t
long long pret = b[i].t;
if (pret <= b[0].t)
{
vector[0] = maxim(pret - C, 0);
max = maxim(vector[0], max);
}
else
{
vector[0] = 0;
}
for (int j = 1; j < N; ++j)
{
if (pret <= b[j].t)
{
vector[j] = maxim(pret - C, vector[j - 1] - ((b[j].p - b[j - 1].p) * C) + pret);
max = maxim(vector[j], max);
}
else
{
vector[j] = maxim(0, vector[j - 1] - (b[j].p - b[j - 1].p) * C);
max = maxim(vector[j], max);
}
}
/*
for (int j = 0; j < N; ++j)
{
if (vector[j] > max)
{
max = vector[j];
}
}
*/
}
fprintf(g, "%lld", max);
fclose(g);
return 0;
}