Pagini recente » Cod sursa (job #1133629) | Cod sursa (job #2420635) | Cod sursa (job #2166261) | Cod sursa (job #843502) | Cod sursa (job #197507)
Cod sursa(job #197507)
#include <stdio.h>
#include <string.h>
int N, M, start[2048], End[2048], sum[2048], poz[2048];
long long S[2048];
int main(void)
{
int i, j, k;
int ok = 0;
freopen("reconst.in", "r", stdin);
freopen("reconst.out", "w", stdout);
scanf("%d %d", &N, &M);
for (i = 1; i <= M; ++i)
scanf("%d %d %d", &start[i], &End[i], &sum[i]);
for (; !ok; )
{
memset(poz, 0, sizeof(poz));
for (i = 1; i <= M; ++i)
if (!poz[End[i]])
poz[End[i]] = i;
for (i = 1, ok = 1; i <= N; ++i)
if (poz[End[i]] && poz[End[i]] != i)
{
ok = 0;
k = poz[End[i]];
if (start[k] > start[i])
End[i] = start[k]-1,
sum[i] = sum[i]-sum[k];
else
End[k] = start[i]-1,
sum[k] = sum[k]-sum[i],
poz[k] = 0;
}
}
for (i = 1; i <= N; ++i)
{
for (j = 1, ok = 0; j <= M; ++j)
if (End[j] == i)
{
ok = 1;
S[i] = S[i-1] + (sum[j] - S[i-1] + S[start[j]-1]);
break;
}
if (!ok)
S[i] = S[i-1];
}
for (i = 1; i <= N; ++i)
printf("%d ", (int)(S[i]-S[i-1]));
printf("\n");
return 0;
}