Cod sursa(job #1972142)

Utilizator refugiatBoni Daniel Stefan refugiat Data 22 aprilie 2017 08:05:36
Problema Reconst Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream si("reconst.in");
ofstream so("reconst.out");
struct inter
{
    int st,dr,s;
};
bool comp(inter a,inter b)
{
    return a.dr<b.dr;
}
int v[2005];
inter x[2005];
long long sum[2005];
int main()
{
    int n,m;
    si>>n>>m;
    for(int i=1;i<=m;++i)
    {
        si>>x[i].st>>x[i].dr>>x[i].s;
    }
    sort(x+1,x+1+m,comp);
    inter r;
    int poz,ns,nf;
    for(int i=2;i<=m;++i)
    {
        poz=i;
        while(poz&&x[poz].dr<=x[poz-1].dr)
        {
            if(x[poz].dr==x[poz-1].dr)
            {
                if(x[poz].st==x[poz-1].st)
                    break;
                if(x[poz].st<x[poz-1].st)
                {
                    x[poz].s-=x[poz-1].s;
                }
                else
                    x[poz].s=x[poz-1].s-x[poz].s;
                ns=min(x[poz].st,x[poz-1].st);
                nf=max(x[poz].st,x[poz-1].st)-1;
                x[poz].st=ns;
                x[poz].dr=nf;
            }
            else
            {
                r=x[poz];
                x[poz]=x[poz-1];
                x[poz-1]=r;
                --poz;
            }
        }
    }
    poz=1;
    for(int i=1;i<=n;++i)
    {
        if(i!=x[poz].dr)
        {
            sum[i]=sum[i-1]+v[i];
            continue;
        }
        v[i]=x[poz].s-sum[i-1]+sum[x[poz].st-1];
        sum[i]=sum[i-1]+v[i];
        while(x[poz].dr==x[poz+1].dr)
            ++poz;
        ++poz;
    }
    for(int i=1;i<=n;++i)
        so<<v[i]<<' ';
    return 0;
}