Cod sursa(job #1982106)

Utilizator TincaMateiTinca Matei TincaMatei Data 17 mai 2017 18:10:56
Problema Reconst Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <cstdio>

const int MAX_N = 2000;
int prec[1+MAX_N], left[1+MAX_N], suma[1+MAX_N];

inline void swap(int &a, int &b) {
  int aux = a;
  a = b;
  b = aux;
}

inline void simplify(int l, int r, int s) {
  while(r > 0 && left[r] != 0) {
    if(l > left[r]) {
      swap(l, left[r]);
      swap(s, suma[r]);
    } else if(l == left[r])
      l = r = 0;
    s = s - suma[r];
    r = left[r] - 1;
  }
  left[r] = l;
  suma[r] = s;
}

int main() {
  int n, m, l, r, s;
  FILE *fin = fopen("reconst.in", "r");
  fscanf(fin, "%d%d", &n, &m);
  for(int i = 0; i < m; ++i) {
    fscanf(fin, "%d%d%d", &l, &r, &s);
    simplify(l, r, s);
  }
  fclose(fin);

  for(int i = 1; i <= n; ++i)
    printf("%d %d %d\n", left[i], i, suma[i]);

  FILE *fout = fopen("reconst.out", "w");
  for(int i = 1; i <= n; ++i) {
    if(left[i] != 0)
      prec[i] = prec[left[i] - 1] + suma[i];
    fprintf(fout, "%d ", prec[i] - prec[i - 1]);
  }
  fclose(fout);
  return 0;
}

//George Rapeanu te pup :*