Cod sursa(job #206332)

Utilizator alexeiIacob Radu alexei Data 5 septembrie 2008 22:52:38
Problema Reconst Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<stdio.h>
#define NMAX 2024
//Motto: Be greedy!
int A[NMAX],S[NMAX],SOL[NMAX];
bool REC[NMAX];

void solve(const int a1,const int a2,const int a3)
{
     if( REC[a1]==false )
     {   //initialize
         A[a1]=a2;
         S[a1]=a3;
         REC[a1]=true;
     }
     else
     {
         if( A[a1]<a2 )
         {   //change
             solve( A[a1]+1, a2, a3-S[a1] );
         }
         else
             if( A[a1]>a2 )
             {   //replace 
                 solve( a2+1, A[a1], S[a1]-a3 );
                 A[a1]=a2;
                 S[a1]=a3;
             }
     }
}

int main()
{
 freopen("reconst.in","r",stdin);
 freopen("reconst.out","w",stdout);
 
 int N,M;
 scanf("%d%d\n",&N,&M);
 
 int a1,a2,a3;
 int i,j; 
 for(i=1; i<=N; ++i) REC[i]=false;
 
 for(i=1; i<=N; ++i){
 scanf("%d%d%d",&a1,&a2,&a3);   
 solve(a1,a2,a3);
 }    
 
 for(i=N; i>=1; --i)
 {       // printf("%d ",S[i]);
          SOL[i]=S[i];
          for(j=i+1; j<=A[i]; ++j)    
          SOL[i]-=S[j];
          S[i]=SOL[i];
 }
    
 for(i=1; i<=N; ++i)
          printf("%d ",SOL[i]);
 printf("\n");
    return 0;
}