Cod sursa(job #901660)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 1 martie 2013 11:07:39
Problema Stalpi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#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;
}