Cod sursa(job #197728)

Utilizator pauldbPaul-Dan Baltescu pauldb Data 5 iulie 2008 16:52:15
Problema Reconst Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

#define maxn 2010

int n, m;
int a[maxn], b[maxn];
int x[maxn], y[maxn], p[maxn], s[maxn];
int sum[maxn], sol[maxn];

int main()
{
	freopen("reconst.in", "r", stdin);
	freopen("reconst.out", "w", stdout);

	scanf("%d %d ", &n, &m);

	int i;

	for (i=1; i<=m; i++) scanf("%d %d %d ", &x[i], &y[i], &s[i]);

	for (i=1; i<=m; i++)
	{
		while (a[y[i]] && x[i]<=y[i])
		{
			if (a[y[i]] >= x[i]) s[i] -= b[y[i]];
			else {
					 int v1, v2;
					 v1 = a[y[i]];
					 v2 = b[y[i]] - s[i];
				     b[y[i]] = s[i];
					 a[y[i]] = x[i];
					 x[i] = v1;
					 s[i] = v2;
				 }
 		    y[i] = a[y[i]] - 1;
		}

		if (y[i] >= x[i])
		{
			a[y[i]] = x[i];
			b[y[i]] = s[i];
		}
	}

	for (i=1; i<=n; i++) 
	{
		if (a[i]) sol[i] = b[i] - (sum[i-1] - sum[a[i]-1]);
		sum[i] = sum[i-1] + sol[i];
	}

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

	return 0;
}