Cod sursa(job #198068)

Utilizator tvladTataranu Vlad tvlad Data 8 iulie 2008 12:39:45
Problema Reconst Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <cstdio>
#include <algorithm>
using namespace std;

const int N = 2000;
const int M = 2000;

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 start[N];
int r[N];

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);
		--v[i].a; --v[i].b;
	}
	sort(v,v+m);
	for (int i = 0; i < m; ++i) start[i] = -1;
	for (int i = 0; i < m; ++i) {
		while (start[v[i].a] != -1 && v[i].a <= v[i].b) {
			v[i].s -= v[start[v[i].a]].s;
			v[i].a = v[start[v[i].a]].b + 1;
		}
		if (v[i].a <= v[i].b) start[v[i].a] = i;
	}
	for (int i = n-1; i >= 0; --i) {
		if (start[i] != -1) {
			int ss = 0;
			for (int j = i+1; j <= v[start[i]].b; ++j) ss += r[j];
			r[i] = v[start[i]].s - ss;
		}
	}
	for (int i = 0; i < n; ++i) printf("%d ",r[i]);
	return 0;
}