Pagini recente » Cod sursa (job #2175133) | Cod sursa (job #2709475) | Cod sursa (job #1752400) | Cod sursa (job #1714988) | Cod sursa (job #901660)
Cod sursa(job #901660)
#include<stdio.h>
#include<algorithm>
#include<set>
#define maxn 100005
using namespace std;
FILE*f=fopen("stalpi.in","r");
FILE*g=fopen("stalpi.out","w");
int n;
int x[maxn],costa[maxn];
long long D[maxn],value[maxn];
pair< int,int >in[maxn],out[maxn];
multiset<long long>S;
int main () {
fscanf(f,"%d",&n);
int c,s,d;
for ( int i = 1 ; i <= n ; ++i ){
fscanf(f,"%d %d %d %d",&x[i],&c,&s,&d);
in[i] = make_pair(x[i]-s,i);
out[i] = make_pair(x[i]+d+1,i);
costa[i] = c;
}
sort(x+1,x+n+1);
sort(in+1,in+n+1);
sort(out+1,out+n+1);
int p = 0,u = 0;
for ( int i = 1 ; i <= n ; ++i ){
while ( p < n && in[p+1].first <= x[i] ){
++p;
long long c = D[i-1] + costa[in[p].second];
value[in[p].second] = c;
S.insert(c);
}
while ( u < n && out[u+1].first <= x[i] ){
++u;
S.erase(S.find(value[out[u].second]));
}
D[i] = (*S.begin());
}
fprintf(g,"%lld\n",D[n]);
fclose(f);
fclose(g);
return 0;
}