Cod sursa(job #1512370)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 27 octombrie 2015 22:53:54
Problema Reconst Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <cstdio>

#define DIM 2048
using namespace std;

int N, M, left, right, cost;

int EndOf[DIM];
int SumOf[DIM];

void setDistance (int left, int right, int cost) // ideea e sa scap de intervale incluse unu'n altu'
{
    if (!EndOf[left])
    {
        EndOf[left] = right;
        SumOf[left] = cost;
    }
    else
    {
        if (EndOf[left] > right)
        {
            setDistance (right + 1, EndOf[left], SumOf[left] - cost);

            EndOf[left] = right;
            SumOf[left] = cost;
        }
        else
            setDistance (EndOf[left] + 1, right, cost - SumOf[left]);
    }

    return;
}

int main ()
{
    freopen ("reconst.in" ,"r", stdin );
    freopen ("reconst.out","w", stdout);

    scanf ("%d %d", &N, &M);

    for (int i = 1; i <= M; i ++)
    {
        scanf ("%d %d %d", &left, &right, &cost);

        setDistance (left, right, cost);
    }

    for (int i = N; i >= 1; i --)
        for (int j = i + 1; j <= EndOf[i]; j ++)
            SumOf[i] -= SumOf[j];

    for (int i = 1; i <= N; i ++)
        printf ("%d ", SumOf[i]);

    fclose (stdin );
    fclose (stdout);

    return 0;
}