Pagini recente » Cod sursa (job #3222597) | Cod sursa (job #1831050) | Cod sursa (job #2907159) | Cod sursa (job #1510735) | Cod sursa (job #137617)
Cod sursa(job #137617)
#include <cstdio>
#include <algorithm>
using namespace std;
long n,x[100000],c[100000],s[100000],d[100000],cs[2][100000];
void qsort(int ls,int lf)
{
if (ls<lf)
{
long i1=0,j1=-1,i=ls,j=lf;
while (i<j)
{
if (x[i]>x[j])
{
x[i]^=x[j]^=x[i]^=x[j];
c[i]^=c[j]^=c[i]^=c[j];
s[i]^=s[j]^=s[i]^=s[j];
d[i]^=d[j]^=d[i]^=d[j];
long aux=i1;
i1=-j1;
j1=-aux;
}
i+=i1;
j+=j1;
}
qsort(ls,i);
qsort(i+1,lf);
}
}
int main()
{
freopen("stalpi.in","r",stdin);
freopen("stalpi.out","w",stdout);
scanf("%ld\n",&n);
long i,j;
for (i=0;i<n;i++)
{
scanf("%ld %ld %ld %ld\n",&x[i],&c[i],&s[i],&d[i]);
s[i]=x[i]-s[i];
d[i]=x[i]+d[i];
cs[0][i]=100001;
}
qsort(0,n-1);
j=1;
cs[1][0]=c[0];
while (j<n&&d[0]>=x[j])
{
cs[0][j]=c[0];
j++;
}
for (i=1;i<n;i++)
{
j=i-1;
while (j>=0&&x[j]>=s[i])
j--;
long plus=0;
if (j>=0)
plus=min(cs[0][j],cs[1][j]);
j++;
while (j<i)
{
cs[0][j]=min(cs[0][j],c[i]+plus);
j++;
}
j=i+1;
while (j<n&&x[j]<=d[i])
{
cs[0][j]=min(cs[0][j],c[i]+plus);
j++;
}
cs[1][i]=c[i]+plus;
}
printf("%ld\n",min(cs[0][n-1],cs[1][n-1]));
return 0;
}