Cod sursa(job #2759704)

Utilizator stefantagaTaga Stefan stefantaga Data 19 iunie 2021 23:02:58
Problema Reconst Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.27 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("reconst.in");
ofstream g("reconst.out");
int din[2005][2005],sol[2005],n,m,i,x,y,z,j,ok;
vector <int> v[2005],v2[2005];
struct wow
{
    int x,y,z,nr;
}ceau[2005];
int main()
{
    f>>n>>m;
    for (i=1;i<=m;i++)
    {
        f>>x>>y>>z;
        din[x][y]=z;
        ceau[i].x=x;
        ceau[i].y=y;
        ceau[i].z=z;
        ceau[i].nr=y-x+1;
        v[x].push_back(y);
    }
    for (i=1;i<=n;i++)
    {
        sort (v[i].begin(),v[i].end());
        for (j=1;j<v[i].size();j++)
        {
            int poz1=v[i][j-1],poz2=v[i][j];
            v[poz1+1].push_back(poz2);
            din[poz1+1][poz2]=din[i][poz2]-din[i][poz1];
        }
    }
    for (i=1;i<=n;i++)
    {
        for (j=0;j<v[i].size();j++)
        {
            v2[v[i][j]].push_back(i);
        }
    }
    for (i=n;i>=1;i--)
    {
        sort (v2[i].begin(),v2[i].end());
        for (j=(int)v2[i].size()-2;j>=0;j--)
        {
            int poz1=v2[i][j],poz2=v2[i][j+1];
            v2[poz1].push_back(poz2-1);
            din[poz1][poz2-1]=din[poz1][i]-din[poz2][i];
        }
    }
    for (i=1;i<=n;i++)
    {
        sol[i]=din[i][i];
        if (sol[i]!=0)
        {
            for (j=1;j<=m;j++)
            {
                if (ceau[j].x<=i&&i<=ceau[j].y)
                {
                    ceau[j].nr--;
                    ceau[j].z-=din[i][i];
                }
            }
        }
    }
    for (i=1;i<=n;i++)
    {
        if (sol[i]==0)
        {
            ok=0;
            for (j=1;j<=m;j++)
            {
                if (ceau[j].x<=i&&i<=ceau[j].y)
                {
                    if (ceau[j].nr==1)
                    {
                        sol[i]=ceau[j].z;
                        ok=1;
                    }
                    ceau[j].nr--;
                }
            }
            if (ok==0)
            {
                sol[i]=rand()%10;
            }
            for (j=1;j<=m;j++)
            {
                if (ceau[j].x<=i&&i<=ceau[j].y)
                {
                    ceau[j].z-=sol[i];
                }
            }
        }
    }
    for (i=1;i<=n;i++)
    {
        g<<sol[i]<<" ";
    }
    return 0;
}