Pagini recente » Cod sursa (job #2292181) | Cod sursa (job #2109353) | Cod sursa (job #782379) | Cod sursa (job #1858683) | Cod sursa (job #1104239)
#include<fstream>
#include<set>
#include<algorithm>
using namespace std;
#define nmax 100010
ifstream f("stalpi.in");
ofstream g("stalpi.out");
struct nod
{
int x;
int nr;
} s[nmax],d[nmax],coord[nmax];
bool cmp(nod a, nod b)
{
return (a.x<b.x);
}
long long n,cost[nmax],v[nmax],val[nmax];
multiset <long long> h;
int main()
{
f>>n;
int l,r;
for(int i=1;i<=n;i++)
{
coord[i].nr=s[i].nr=d[i].nr=i;
f>>coord[i].x>>cost[i]>>l>>r;
s[i].x=coord[i].x-l;
d[i].x=coord[i].x+r;
}
sort(coord+1,coord+n+1,cmp);
sort(s+1,s+n+1,cmp);
sort(d+1,d+n+1,cmp);
int j=1,k=1;
for(int i=1;i<=n;i++)
{
while(j<=n&&s[j].x<=coord[i].x)
{
h.insert(v[i-1]+cost[s[j].nr]);
val[s[j].nr]=v[i-1]+cost[s[j].nr];
j++;
}
while(k<=n && d[k].x<coord[i].x)
{
h.erase(*h.find(val[d[k].nr]));
k++;
}
v[i]=*h.begin();
}
g<<v[n]<<'\n';
return 0;
}