Pagini recente » Cod sursa (job #1368313) | Cod sursa (job #2218009) | Cod sursa (job #2257356) | Cod sursa (job #2030500) | Cod sursa (job #1104870)
#include<cstdio>
#include<algorithm>
#include<set>
using namespace std;
long long n,xx,cc,ss,d,c[100005],v[100005],j,k,val[100005];
multiset<long long>hp;
struct stalp
{
int x,nrs;
};
stalp l[100005],r[100005],s[100005];
void citire()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d%d%d",&xx,&cc,&ss,&d);
s[i].x=xx;
s[i].nrs=i;
l[i].x=xx-ss;
l[i].nrs=i;
r[i].x=xx+d;
r[i].nrs=i;
c[i]=cc;
}
}
bool cmp(stalp a,stalp b)
{
return a.x<b.x;
}
int main()
{
freopen("stalpi.in","r",stdin);
freopen("stalpi.out","w",stdout);
citire();
sort(l+1,l+n,cmp);
sort(r+1,r+n,cmp);
sort(s+1,s+n,cmp);
j=k=1;
for(int i=1;i<=n;i++)
{
while(l[j].x<=s[i].x && j<=n)
{
hp.insert(v[i-1]+c[l[j].nrs]);
val[l[j].nrs]=v[i-1]+c[l[j].nrs];
j++;
}
while(r[k].x<s[i].x && k<=n)
{
hp.erase(hp.find(val[r[k].nrs]));
k++;
}
v[i]=*hp.begin();
}
printf("%lld\n",v[n]);
return 0;
}