Cod sursa(job #2756764)

Utilizator Alex_tz307Lorintz Alexandru Alex_tz307 Data 2 iunie 2021 20:01:53
Problema Reconst Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("reconst.in");
ofstream fout("reconst.out");

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

const int MAXN = 2e3 + 1;
vector<pair<int,int>> pos[MAXN], aux[MAXN];
pair<int,int> v[MAXN];
int a[MAXN];

int main() {
  int n, m;
  fin >> n >> m;
  for (int i = 0; i < m; ++i) {
    int l, r, sum;
    fin >> l >> r >> sum;
    pos[l].emplace_back(r, sum);
  }
  bool ok = true;
  while (ok) {
    ok = false;
    for (int i = 1; i <= n; ++i)
      aux[i].clear();
    for (int i = 1; i <= n; ++i) {
      v[i] = make_pair(-1, -1);
      if (!pos[i].empty()) {
        sort(pos[i].begin(), pos[i].end());
        v[i] = pos[i][0];
        aux[i].emplace_back(pos[i][0]);
        for (int j = 1; j < (int)pos[i].size(); ++j)
          if (pos[i][j - 1].first < pos[i][j].first) {
            ok = true;
            pair<int,int> p;
            p = make_pair(pos[i][j].first, pos[i][j].second - pos[i][j - 1].second);
            int poz = pos[i][j - 1].first + 1;
            aux[poz].emplace_back(p);
            v[poz] = p;
          }
      }
    }
    for (int i = 1; i <= n; ++i)
      pos[i] = aux[i];
  }
  for (int i = n; i > 0; --i)
    if (v[i].first != -1) {
      a[i] = v[i].second;
      for (int j = i + 1; j <= v[i].first; ++j)
        a[i] -= a[j];
    }
  for (int i = 1; i <= n; ++i)
    fout << a[i] << ' ';
  fout << '\n';
  fin.close();
  fout.close();
  return 0;
}