Pagini recente » Cod sursa (job #568733) | Cod sursa (job #1805212) | Cod sursa (job #1170391) | Cod sursa (job #1620250) | Cod sursa (job #491938)
Cod sursa(job #491938)
#include <cstdio>
#include <algorithm>
#include <set>
using namespace std;
#define nmax 100010
struct stalp
{
int x, c, s, d;
} v[nmax];
int cmp(stalp a, stalp b)
{
return a.x<b.x;
}
int n;
set <pair <long long, int> > s;
pair <long long, int> d[nmax];
long long best[nmax];
int main()
{
freopen("stalpi.in","r",stdin);
freopen("stalpi.out","w",stdout);
scanf("%d",&n);
int i, p, j, st, dr;
long long x;
for (i=1; i<=n; i++) scanf("%d %d %d %d",&v[i].x, &v[i].c, &v[i].s, &v[i].d);
sort(v+1, v+n+1, cmp);
st=dr=1;
d[1]=make_pair(0,0);
for (i=1; i<=n; i++)
{
while(st<=dr && v[d[st].second].x<v[i].x-v[i].s) st++;
x=d[st].first+v[i].c;
s.insert(make_pair(x,v[i].x+v[i].d));
while ((*(s.begin())).second<v[i].x) s.erase(s.begin());
best[i]=(*(s.begin())).first;
while (best[i]<d[dr].first && dr>=st) dr--;
dr++;
d[dr]=make_pair(best[i], i);
}
printf("%lld\n",best[n]);
}