Cod sursa(job #1104213)

Utilizator TodeaDariustodea darius TodeaDarius Data 10 februarie 2014 16:23:46
Problema Stalpi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include<cstdio>
#include<algorithm>
#include<set>
using namespace std;
int n,xx,cc,ss,d,c[100005],v[100005],j,k,val[100005];
multiset<int>hp;
struct stalp
{
    int x,nrs;
};
stalp l[100005],r[100005],s[100005];
void citire()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d%d%d",&xx,&cc,&ss,&d);
        s[i].x=xx;
        s[i].nrs=i;
        l[i].x=ss;
        l[i].nrs=i;
        r[i].x=d;
        r[i].nrs=i;
        c[i]=cc;
    }
}
bool cmp(stalp a,stalp b)
{
    return a.x<b.x;
}
int main()
{
    freopen("stalpi.in","r",stdin);
    freopen("stalpi.out","w",stdout);

    citire();
    sort(l+1,l+n,cmp);
    sort(r+1,r+n,cmp);
    sort(s+1,s+n,cmp);
    for(int i=1;i<=n;i++)
    {
        j=1;
            while(l[j].x<=s[i].x)
            {
                hp.insert(v[i-1]+c[l[j].nrs]);
                val[l[j].nrs]=v[i-1]+c[l[j].nrs];
                j++;
            }
        k=1;
            while(r[k].x<s[i].x)
            {
                hp.erase(hp.find(val[r[k].nrs]));
                k++;
            }
           v[i]=*hp.begin();
    }
    printf("%d\n",v[n]);
    return 0;
}