Pagini recente » Cod sursa (job #1305898) | Cod sursa (job #963147) | Arhiva de probleme | Cod sursa (job #1936589) | Cod sursa (job #479831)
Cod sursa(job #479831)
#include <algorithm>
#include <stdio.h>
#define MAX 100010
#define mp make_pair
#define f first
#define s second
using namespace std;
int n, rx;
int x[MAX], sol[MAX];
pair <pair <int, int>, int> vctInt[MAX];
pair <int, int> deqEl[MAX];
int main()
{
freopen("stalpi.in", "r", stdin);
freopen("stalpi.out", "w", stdout);
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
int c, s, d;
scanf("%d %d %d %d", &x[i], &c, &s, &d);
vctInt[i] = mp(mp(x[i] - s, x[i] + d), c);
}
sort(x + 1, x + 1 + n);
sort(vctInt + 1, vctInt + 1 + n);
int deqSt = 1, deqFn = 0;
for (int i = 1; i <= n; i++)
{
for (; rx <= n && x[rx] < vctInt[i].f.f; rx++)
{
for (; deqEl[deqSt].s < x[rx]; deqSt++);
sol[rx] = deqEl[deqSt].f;
}
deqEl[++deqFn] = mp(sol[rx - 1] + vctInt[i].s, vctInt[i].f.s);
for (; deqFn > deqSt; )
if (deqEl[deqFn].f < deqEl[deqFn - 1].f)
{
swap(deqEl[deqFn], deqEl[deqFn - 1]);
deqFn--;
}
else break;
}
for (; rx <= n; rx++)
{
for (; deqEl[deqSt].s < x[rx]; deqSt++);
sol[rx] = deqEl[deqSt].f;
}
printf("%d\n", sol[n]);
fclose(stdin);
fclose(stdout);
return 0;
}