Pagini recente » Cod sursa (job #2494330) | Cod sursa (job #520734) | Cod sursa (job #2414449) | Cod sursa (job #160420) | Cod sursa (job #1746203)
#include <bits/stdc++.h>
#define maxN 100002
#define zeros(x) x & (-x)
using namespace std;
int n, a[maxN], aib[maxN];
struct pillar
{
int x, y, c, p;
} v[maxN];
int cmp(const pillar a, const pillar b)
{
return a.y < b.y;
}
int Min(int x)
{
if (x < 1)
return 0;
int i, ans = aib[x];
for (i = x; i <= n; i += zeros(i))
if (aib[i] < ans)
ans = aib[i];
return ans;
}
void upd(int x, int val)
{
int i;
for (i = x; i >= 1; i -= zeros(i))
if (aib[i] > val)
aib[i] = val;
}
int bs(int x)
{
int i = 0, p = 1 << 16;
while (p)
{
if (i + p <= n && a[i + p] <= x)
i += p;
p >>= 1;
}
return i;
}
void read()
{
int i;
freopen("stalpi.in", "r", stdin);
scanf("%d", &n);
for (i = 1; i <= n; ++ i)
{
int x, l, r;
scanf("%d %d %d %d", &x, &v[i].c, &l, &r);
v[i].x = x - l;
v[i].y = x + r;
a[i] = x;
}
}
void solve()
{
int i;
sort(v + 1, v + n + 1, cmp);
sort(a + 1, a + n + 1);
memset(aib, 0x3f, sizeof(aib));
for (i = 1; i <= n; ++ i)
{
int l = bs(v[i].x), r = bs(v[i].y);
int cost = Min(l) + v[i].c;
upd(r, cost);
}
}
void write()
{
freopen("stalpi.out", "w", stdout);
printf("%d\n", aib[n]);
}
int main()
{
read();
solve();
write();
return 0;
}