Cod sursa(job #198012)

Utilizator andrei-alphaAndrei-Bogdan Antonescu andrei-alpha Data 7 iulie 2008 21:04:59
Problema Reconst Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <cstdio>
#define IN "reconst.in"
#define OUT "reconst.out"
#define N_MAX 2000
#define FOR(i,a,b) for(int i=a;i<=b;++i)

int N,M;
int last[N_MAX];
int sum[N_MAX];
int v[N_MAX];

void scan()
{
	freopen(IN, "r",stdin);
	freopen(OUT, "w",stdout);
	scanf("%d%d\n",&N,&M);
}

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

void solve()
{
	int a,b,s;
	FOR(i,1,M)
	{
		scanf("%d%d%d\n", &a,&b,&s);
		if(a <= b)
			add(a,b,s);
	}	
}

void print()
{
	FOR(i,0,N-1)  
    {  
       	if(last[N-i])  
            v[N-i] = sum[N-i] + v[ last[N-i] + 1 ];  
        else  
            v[N-i] = v[N-i+1];  
	}
	
	FOR(i,1,N)  
    	printf("%d ", v[i] - v[i+1]);  
}

int main()
{
	scan();
	solve();
	print();	
	return 0;
}