Cod sursa(job #1104241)

Utilizator marinutzacatana marina marinutza Data 10 februarie 2014 16:57:36
Problema Stalpi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<fstream>
#include<set>
#include<algorithm>
using namespace std;
#define nmax 100010
ifstream f("stalpi.in");
ofstream g("stalpi.out");
struct nod
{
	int x;
	int nr;
} s[nmax],d[nmax],coord[nmax];
bool cmp(nod a, nod b)
{
	return (a.x<b.x);
}
long long n,cost[nmax],v[nmax],val[nmax];
multiset <long long> h;
int main()
{
	f>>n;
	int l,r;
	for(int i=1;i<=n;i++)
	{
		coord[i].nr=s[i].nr=d[i].nr=i;
		f>>coord[i].x>>cost[i]>>l>>r;
		s[i].x=coord[i].x-l;
		d[i].x=coord[i].x+r;
	}
	sort(coord+1,coord+n+1,cmp);
	sort(s+1,s+n+1,cmp);
	sort(d+1,d+n+1,cmp);
	int j=1,k=1;
	for(int i=1;i<=n;i++)
	{
		while(j<=n&&s[j].x<=coord[i].x)
		{
			h.insert(v[i-1]+cost[s[j].nr]);
			val[s[j].nr]=v[i-1]+cost[s[j].nr];
			j++;
		}
		while(k<=n && d[k].x<coord[i].x)
		{
			h.erase(h.find(val[d[k].nr]));
			k++;
		}
		v[i]=*h.begin();
	}
	g<<v[n]<<'\n';
    return 0;
}