Cod sursa(job #2178105)

Utilizator FunnyStockyMihnea Andreescu FunnyStocky Data 19 martie 2018 08:51:17
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include <fstream>
using namespace std;

ifstream fin("ramen.in");
ofstream fout("ramen.out");

struct comanda
{
    int st, dr, p, d;
} q[100001];

int n, d;
int b, e;
int sol[100001];

int main()
{
    int t, p;

    fin >> n >> d;
    for (int i = 1; i <= n; i++)
    {
        bool ok = true;

        fin >> t >> p;
        if (e == 0)
        {
            q[e].st = t + d;
            q[e].dr = t + d + p;
            q[e].d = p;
            q[e++].p = i;
        }
        else
        {
            for (int j = b; j < e && ok; j++)
            {
                if(q[j].st < t + d && q[j].st + p >= t && q[j].dr >= q[j].st + p)
                {
                    int dest = q[j].d;

                    q[e].st = t + d;
                    q[e].dr = t + d + q[j].d;
                    q[e].d = dest;
                    q[e++].p = q[j].p;

                    q[j].dr = q[j].st + p;
                    q[j].p = i;
                    q[j].d = p;
                    ok = false;
                }
            }
            if (ok)
            {
                q[e].st = t + d;
                q[e].dr = t + d + p;
                q[e].d = p;
                q[e++].p = i;
            }
        }
    }

    for (int i = 0; i < n; i++)
        sol[q[i].p] = q[i].dr;

    for (int i = 1; i <= n; i++)
        fout<< sol[i] << '\n';

    return 0;
}