Cod sursa(job #2423480)

Utilizator lucametehauDart Monkey lucametehau Data 21 mai 2019 15:49:38
Problema Reconst Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

ifstream cin ("reconst.in");
ofstream cout ("reconst.out");

struct Seg {
  int l, r, sum;
};

int n, m;

Seg s[2005];
int sol[2005];
vector <int> v[2005];

bool compare(int a, int b) {
  return s[a].r < s[b].r;
}

int main() {
  cin >> n >> m;
  for(int i = 1; i <= m; i++)
    cin >> s[i].l >> s[i].r >> s[i].sum, v[s[i].l].push_back(i);
  for(int i = 1; i <= n; i++) {
    if(v[i].size() > 1) {
      sort(v[i].begin(), v[i].end(), compare);
      int poz = v[i][0];
      for(int j = 1; j < v[i].size(); j++) {
        if(s[poz].r != s[v[i][j]].r) {
          s[v[i][j]].l = s[poz].r + 1;
          s[v[i][j]].sum -= s[poz].sum;
          v[s[v[i][j]].l].push_back(v[i][j]);
        }
      }
      while(v[i].size() > 1)
        v[i].pop_back();
    }
  }
  for(int i = n; i >= 1; i--) {
    if(v[i].size()) {
      int sum = 0;
      for(int j = s[v[i][0]].l + 1; j <= s[v[i][0]].r; j++)
        sum += sol[j];
      sol[i] = s[v[i][0]].sum - sum;
    }
  }
  for(int i = 1; i <= n; i++)
    cout << sol[i] << " ";
  return 0;
}