Cod sursa(job #210856)

Utilizator alex_mircescuAlex Mircescu alex_mircescu Data 29 septembrie 2008 19:19:14
Problema Reconst Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <stdio.h>
#include <math.h>

#define MAXN 2010

long a, b, c, n, m, sir[MAXN], sum[MAXN], last[MAXN], i;

void insert(long a, long b, long s);

void insert(long a, long b, long s) {
	if (b < a) {
		return;
	}
	if (!last[a]) {
		last[a]=b;
		sum[a]=s;
		return;
	}
	
	if (last[a] < b) {
		insert(last[a] + 1, b , s - sum[a]);
	} else {
		insert(b + 1, last[a], sum[a] - s);
		last[a] = b;
		sum[a] = s;
	}
}

int main() {
	freopen("reconst.in", "r", stdin);
	freopen("reconst.out", "w", stdout);
	scanf("%ld%ld", &n, &m);
	for(i = m; i >= 1; --i) {
		scanf("%ld%ld%ld", &a, &b, &c);
		insert(a, b, c);
	}
	
	for (i = n; i > 0; --i) {
		if(last[i]) {
			sir[i] = sum[i] + sir[last[i] + 1];
		} else {
			sir[i] = sir[i + 1];
		}
	}
	for (i = 1; i < n; ++i) {
		printf("%ld ", sir[i] - sir[i + 1]);
	}
	printf("%ld\n", sir[n]);
	return 0;
}