Cod sursa(job #198314)

Utilizator tvladTataranu Vlad tvlad Data 10 iulie 2008 12:29:09
Problema Reconst Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <cstdio>
#include <algorithm>
using namespace std;

const int N = 2008;
const int M = 2008;

struct interval { int a,b,s; };
bool operator< ( const interval &a, const interval &b ) { return (a.a == b.a) ? (a.b < b.b) : (a.a < b.a); }

int n,m;
interval v[M];
int b[N], s[N], r[N];

void insert ( int ac, int bc, int sc ) {
	if (!b[ac]) { 
		b[ac] = bc;
		s[ac] = sc;
	} else
	if (b[ac] > bc) {
		insert(bc+1,b[ac],s[ac]-sc);
		b[ac] = bc;
		s[ac] = sc;
	} else
	if (b[ac] < bc) {
		insert(b[ac]+1,bc,sc-s[ac]);
	}
}

int main() {
	freopen("reconst.in","rt",stdin);
	freopen("reconst.out","wt",stdout);
	scanf("%d %d",&n,&m);
	for (int i = 0; i < m; ++i) {
		scanf("%d %d %d",&v[i].a,&v[i].b,&v[i].s);
		insert(v[i].a,v[i].b,v[i].s);
	}
	for (int i = n; i; --i) {
		if (b[i]) {
			int ss = 0;
			for (int j = i+1; j <= b[i]; ++j) ss += r[j];
			r[i] = s[i] - ss;
		}
	}
	for (int i = 1; i <= n; ++i) printf("%d ",r[i]);
	return 0;
}