Pagini recente » Cod sursa (job #4604) | Cod sursa (job #95634) | Cod sursa (job #2624872) | Cod sursa (job #2053865) | Cod sursa (job #1855690)
#include <iostream>
#include <cstdio>
#include <algorithm>
#define MAXN 100050
#define inf 0x3f3f3f3f
using namespace std;
struct stalp
{
int st, dr, c;
bool operator<(stalp &e)
{
return dr < e.dr;
}
}s[MAXN];
int x[MAXN], aib[MAXN], n;
int query(int pos)
{
if (!pos) return 0;
int mini = inf;
for (pos; pos <= n; pos += pos & -pos)
mini = min(mini, aib[pos]);
return mini;
}
void update(int pos, int val)
{
for (pos; pos; pos -= pos & -pos)
aib[pos] = min(aib[pos], val);
}
int main()
{
freopen("stalpi.in", "r", stdin);
freopen("stalpi.out", "w", stdout);
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d %d %d %d", &x[i], &s[i].c, &s[i].st, &s[i].dr);
s[i].st = x[i]-s[i].st;
s[i].dr += x[i];
aib[i] = inf;
}
sort(x+1, x+n+1);
sort(s+1, s+n+1);
for (int i = 1; i <= n; i++)
{
int best = query(lower_bound(x+1, x+n+1, s[i].st)-x-1);
update(upper_bound(x+1, x+n+1, s[i].dr)-x-1, best + s[i].c);
}
printf("%d", aib[n]);
return 0;
}