Pagini recente » Cod sursa (job #3234992) | Cod sursa (job #2769152) | Cod sursa (job #475648) | Cod sursa (job #2867358) | Cod sursa (job #599217)
Cod sursa(job #599217)
#include<stdio.h>
#include<algorithm>
#include<set>
using namespace std;
#define pi pair<int,int>
#define x first
#define y second
#define mp make_pair
#define NMAX 100006
#define ll long long
multiset<ll> myset;
int stlp[NMAX],cost[NMAX],n;
pi intra[NMAX],iese[NMAX];
ll d[NMAX],aprin[NMAX];
multiset<int>::iterator it;
int main ()
{
int i,poz,poz1,poz2,a,c,b;
freopen("stalpi.in","r",stdin);
freopen("stalpi.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d%d%d%d",&a,&cost[i],&c,&b);
intra[i]=mp(a-c,i);
iese[i]=mp(a+b+1,i);
stlp[i]=a;
}
sort(intra+1,intra+n+1);
sort(iese+1,iese+n+1);
sort(stlp+1,stlp+n+1);
poz1=poz2=1;
for(i=1;i<=n;i++)
{
int r=myset.size();
while(poz1<=n && intra[poz1].x<=stlp[i])
{
poz=intra[poz1].y;
aprin[poz]=d[i-1]+cost[poz];
myset.insert(aprin[poz]);
poz1++;
}
r=myset.size();
while(poz2<=n && iese[poz2].x<=stlp[i])
{
poz=iese[poz2].y;
myset.erase(myset.find(aprin[poz]));
poz2++;
}
r=myset.size();
d[i]=*myset.begin();
}
printf("%lld\n",d[n]);
return 0;
}