Cod sursa(job #961249)

Utilizator primulDarie Sergiu primul Data 11 iunie 2013 20:10:45
Problema Stalpi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<fstream>
#include<algorithm>
#define INF 999999999
using namespace std;
ifstream f("stalpi.in");
ofstream g("stalpi.out");
int i,n,p,x[100100],sol[100100];
long long c;
struct mmm{int c,s,d;}v[100100];
inline bool cmp(mmm a,mmm b)
{
    return a.d<b.d;
}
inline int query(int p)
{
    int rez=INF;
    for(;p<=n;p+=((p^(p-1))&p))
    rez=min(rez,sol[p]);
    return rez;
}
inline void update(int p,long long v)
{
    for(;p;p-=((p^(p-1))&p))
    sol[p]=min(v,(long long)sol[p]);
}
int main()
{
    f>>n;
    for(i=1;i<=n;++i)
    {
        f>>x[i]>>v[i].c>>v[i].s>>v[i].d;
        v[i].s=x[i]-v[i].s;
        v[i].d+=x[i];
        sol[i]=INF;
    }
    sort(x+1,x+n+1);
    sort(v+1,v+n+1,cmp);
    for(i=1;i<=n;++i)
    {
        p=lower_bound(x+1,x+n+1,v[i].s)-x-1;
        if(!p)
        c=0;
        else
        c=query(p);
        c+=v[i].c;
        p=upper_bound(x+1,x+n+1,v[i].d)-x-1;
        update(p,c);
    }
    g<<sol[n]<<'\n';
    return 0;
}