Pagini recente » Cod sursa (job #1123146) | Cod sursa (job #2571104) | Cod sursa (job #625726) | Cod sursa (job #302099) | Cod sursa (job #146860)
Cod sursa(job #146860)
#include<stdio.h>
struct nod{long info;nod *next;};
nod *st[100001],*p;
long n,i,j,x[100001],s[100001],d[100001],aux1,dr[10001];
long long c[100001],aux2,cmin[100001],i8,cc;
void hd(long ic,long nc);
void sh(long i1,long i2);
void get_st(long ii);
void get_dr(long ii);
int main()
{
FILE *f,*g;f=fopen("stalpi.in","r");g=fopen("stalpi.out","w");
fscanf(f,"%ld",&n);
for(i=1;i<=n;i++)fscanf(f,"%ld%lld%ld%ld",&x[i],&c[i],&s[i],&d[i]);
for(i=1;i<=n;i++){s[i]=x[i]-s[i];d[i]=x[i]+d[i];}
for(i=n/2;i>=1;i--)hd(i,n);
for(i=n;i>=1;i--){sh(1,i);hd(1,i-1);}
for(i=1;i<=n;i++)
{ get_st(i);get_dr(i);}
i8=100000;i8*=i8;
for(i=1;i<=n;i++)cmin[i]=i8;
for(i=1;i<=n;i++)
{ for(p=st[i];p;p=p->next)
{ cc=cmin[i-1]+c[p->info];
for(j=dr[p->info];j>=i;j--)
{ if(cmin[j]<=cc)break;
cmin[j]=cc;
}
}
}
fprintf(g,"%lld\n",cmin[n]);
fcloseall();
return 0;
}
void hd(long ic,long nc)
{
long is,is1;is=2*ic;is1=is+1;
if(is>nc)return;
if(is<nc)if(x[is1]>x[is])is=is1;
if(x[is]>x[ic]){sh(is,ic);hd(is,nc);}
}
void sh(long i1,long i2)
{
aux1=x[i1];x[i1]=x[i2];x[i2]=aux1;
aux1=s[i1];s[i1]=s[i2];s[i2]=aux1;
aux1=d[i1];d[i1]=d[i2];d[i2]=aux1;
aux2=c[i1];c[i1]=c[i2];c[i2]=aux2;
}
void get_st(long ii)
{ long ll,rr,mm;
ll=1;rr=ii;
while(x[ll]<s[ii])
{ mm=(ll+rr)/2;
if(x[mm]<=s[ii])ll=mm;
if(x[mm]>=s[ii])rr=mm;
}
p=new nod;
p->info=ii;
p->next=(st[ii])?st[ii]:0;
st[ll]=p;
}
void get_dr(long ii)
{ long ll,rr,mm;
ll=ii;rr=n;
while(x[rr]>d[ii])
{ mm=(ll+rr)/2;
if(x[mm]<=d[ii])ll=mm;
if(x[mm]>=d[ii])rr=mm;
}
dr[ii]=rr;
}