Cod sursa(job #2979864)

Utilizator Theo14Ancuta Theodor Theo14 Data 16 februarie 2023 00:59:30
Problema Stalpi Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<bits/stdc++.h>
#pragma GCC target ("avx2")
#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")
#define int long long
#define INF 1000000000000000000
using namespace std;
ifstream f("stalpi.in");
ofstream g("stalpi.out");

struct elem
{
    int x,c,s,d;
} v[100005];
int a[100005],k,n,dp[100005];

int cmp(elem aa, elem bb)
{
    return aa.x<bb.x;
}

int caut_bin(int x)
{
    int st=0,dr=n,retin=0;
    while(st<=dr)
    {
        int mij=(st+dr)/2;
        if(x<=v[mij].x)
        {
            dr=mij-1;
        }
        else
            st=mij+1,retin=mij;
    }
    return retin;
}

signed main()
{
    int i,j,retin,retin1;
    f>>n;
    for(i=1; i<=n; i++)
    {
        f>>v[i].x>>v[i].c>>v[i].s>>v[i].d;
        v[i].s=max(1LL,v[i].x-v[i].s);
        v[i].d=v[i].x+v[i].d;
    }
    sort(v+1,v+n+1,cmp);
    for(i=1;i<=n;i++)
        dp[i]=INF;
    dp[0]=0;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
        {
            if(v[i].x>=v[j].s && v[i].x<=v[j].d)
            {
                int poz=caut_bin(v[j].s);
                dp[i]=min(dp[i],dp[poz]+v[j].c);
            }
        }
    }
    g<<dp[n];
    return 0;
}