Pagini recente » Cod sursa (job #1502680) | Cod sursa (job #2274660) | Cod sursa (job #2203104) | Cod sursa (job #2626770) | Cod sursa (job #1911061)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("stalpi.in");
ofstream out("stalpi.out");
const int MAXN = 100005;
const int INF = 1 << 29;
struct stalp
{
int cost,st,dr;
}stalpi[MAXN];
bool ordine_buna(stalp a, stalp b)
{
return a.st > b.st;
}
int n;
int poz[MAXN];//pozitiile stalpilor
int aib[MAXN];
void setare_aib(int poz, int nr)
{
while (poz <= n + 1)
{
aib[poz] = min(aib[poz], nr);
poz += poz & -poz;
}
}
int minim_aib(int poz)
{
int rasp = INF;
while(poz >= 1)
{
rasp = min(rasp, aib[poz]);
poz -= poz & -poz;
}
return rasp;
}
void citire()
{
in >> n;
for (int i = 1;i <= n;++i)
{
int st, dr;
in >> poz[i] >> stalpi[i].cost >> st >> dr;
stalpi[i].st = poz[i] - st;
stalpi[i].dr = poz[i] + dr;
}
}
void prelucrare()
{
sort(poz + 1, poz + n + 1);
poz[n + 1] = (1ll << 31) - 1;
sort(stalpi + 1, stalpi + n + 1, ordine_buna);
for (int i = 0;i < MAXN;++i)
aib[i] = INF;
setare_aib(n + 1, 0);
for (int i = 1;i <= n;++i)
{
int st = lower_bound(poz + 1, poz + n + 1, stalpi[i].st) - poz;
int dr = upper_bound(poz + 1, poz + n + 2, stalpi[i].dr) - poz;
setare_aib(st, minim_aib(dr) + stalpi[i].cost);
}
}
int main()
{
citire();
prelucrare();
out << minim_aib(1) << '\n';
return 0;
}