Pagini recente » Cod sursa (job #202531) | Cod sursa (job #1500740) | Cod sursa (job #2010724) | Cod sursa (job #1384490) | Cod sursa (job #133956)
Cod sursa(job #133956)
#include <stdio.h>
#include <algorithm>
using namespace std;
#define mp make_pair
#define FOR(i,s,d) for(i=(s);i<(d);++i)
#define PII pair <int,int>
#define f first
#define s second
#define nmax 100111
#define inf 1000111000
#define pt(i) (1<<(i))
int n,S[nmax],A[nmax];
pair < PII,PII > P[nmax];
int find1(int x)
{
int i,j;
for(i=16,j=0;i>=0;--i)
if(j+pt(i)<n&&P[j+pt(i)].f.f<x)
j+=pt(i);
return n-j;
}
int query(int i)
{
int aux=S[i];
for(;i;i&=i-1)
if(S[i]<aux)
aux=S[i];
return aux;
}
void update(int i,int aux)
{
for(;i<=n;i=(i|(i-1))+1)
if(S[i]>aux)
S[i]=aux;
}
int main()
{
freopen("stalpi.in","r",stdin);
freopen("stalpi.out","w",stdout);
int i,a,b,c,d;
scanf("%d",&n);
FOR(i,0,n)
{
scanf("%d %d %d %d",&a,&b,&c,&d);
P[i]=mp(mp(a,b),mp(c,d));
S[i+1]=inf;
}
sort(P,P+n);
FOR(i,0,n)
{
A[i]=P[i].f.s;
a=P[i].f.f-P[i].s.f;
if(a>P[0].f.f)
A[i]+=query(find1(a));
update(find1(P[i].f.f+P[i].s.s+1),A[i]);
}
printf("%d\n",query(find1(P[n-1].f.f+1)));
return 0;
}