Pagini recente » Cod sursa (job #1521871) | Rating Ene Daniel-Florin (sKz99) | Cod sursa (job #953196) | Cod sursa (job #970269) | Cod sursa (job #1013424)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream f("stalpi.in");
ofstream g("stalpi.out");
int n,v[100005],dx[100005],dy[100005],c[100005],b[100005],inf=2147000000;
vector <int> lft[100005],val[100005];
//-----------------------------
void Read()
{ int i,x,cost,s,d;
f>>n;
for(i=1;i<=n;i++)
{ f>>x>>cost>>s>>d;
v[i]=x;
dx[i]=max(1,x-s);
dy[i]=x+d;
c[i]=cost;
}
sort(v+1,v+n+1);
}
//-----------------------------
int Bs1(int x)
{ int l=1,r=n,m;
while(l<r)
{ m=(l+r)/2;
if (v[m]==x) return m;
if (v[m]>=x) r=m; else l=m+1;
}
return l;
}
//------------------------------
int Bs2(int x)
{ int l=1,r=n,m;
while(l<r)
{ m=(l+r)/2;
if (v[m]==x) return m;
if (v[m]>x) r=m-1; else l=m+1;
}
m=(l+r)/2;
if (v[m]>x && v[m-1]<=x) {m--;l=m;}
return l;
}
//------------------------------
void FindInt()
{ int i;
for(i=1;i<=n;i++)
{dx[i]=Bs1(dx[i]);
dy[i]=Bs2(dy[i]);
lft[dy[i]].push_back(dx[i]);
val[dy[i]].push_back(c[i]);
//cout<<dx[i]<<" "<<dy[i]<<" "<<c[i]<<"\n";
}
}
//-------------------------------
int Vmin(int l,int r)
{ int i,mn=inf;
for(i=l;i<=r;i++)
mn=min(mn,b[i]);
return mn;
}
//-------------------------------
void Dinamic()
{ int i,j,rest;
b[0]=0;
for(i=1;i<=n;i++)
{ b[i]=inf;
for(j=0;j<lft[i].size();j++)
{ rest=Vmin(lft[i][j]-1,i-1);
if (rest!=inf)
b[i]=min(b[i],val[i][j]+rest);
}
}
g<<b[n];
}
//------------------------------
int main()
{ Read();
FindInt();
Dinamic();
return 0;
}