Cod sursa(job #2021230)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 12 septembrie 2017 21:55:43
Problema Reconst Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <bits/stdc++.h>
#define r first
#define val second

const int MAXN = (int) 2e3;

std::vector < std::pair <int, int> > pos[MAXN + 1];

int sol[MAXN + 1];

int main() {
    FILE *fi, *fout;
    int i, j, n, m, l, r, val;
    fi = fopen("reconst.in" ,"r");
    fout = fopen("reconst.out" ,"w");
    fscanf(fi,"%d %d " ,&n,&m);
    for(i = 1; i <= m; i++) {
        fscanf(fi,"%d %d %d " ,&l,&r,&val);
        pos[l].push_back({r, val});
    }
    for(i = 1; i <= n; i++) {
        std::sort(pos[i].begin(), pos[i].end());
        for(j = 1; j < pos[i].size(); j++)
            if(pos[i][0].r != pos[i][j].r && pos[i][0].r < n) {
                pos[pos[i][0].r + 1].push_back({pos[i][j].r, pos[i][j].val - pos[i][0].val});
            }
        while(pos[i].size() > 1)
            pos[i].pop_back();
    }
    for(i = n; i >= 1; i--) {
        if(!pos[i].empty()) {
            int sum = 0;
            for(j = i + 1; j <= pos[i][0].r; j++)
               sum += sol[j];
            sol[i] = pos[i][0].val - sum;
        }
    }
    for(i = 1; i <= n; i++)
        fprintf(fout,"%d " ,sol[i]);
    fclose(fi);
    fclose(fout);
    return 0;
}