Cod sursa(job #197810)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 6 iulie 2008 12:16:06
Problema Reconst Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include<stdio.h>
struct nod{ long a;long b;long s;nod *prev;nod *next;};
nod *p,*u,*q,*paux;
long sum[2005],x[2005],mare,mic,aux,i,m,n,M,gata,aa,bb,ss,smic,smare;
int main()
{
        freopen("reconst.in","r",stdin);
        freopen("reconst.out","w",stdout);
        scanf("%ld%ld",&n,&m);
	p=new nod;u=new nod;M=2001;
        p->a=0;p->b=0;p->s=0;p->next=u;p->prev=0;
        u->a=M;u->b=M;u->s=0;u->next=0;u->prev=p;
        for(;m;m--)
        {
                scanf("%ld%ld%ld",&aa,&bb,&ss);
                gata=0;q=p;
                while(!gata)
                { if(q->next->a<=aa)
                  { q=q->next;continue;}
                  if(q->a<aa)
                  { paux=new nod;
                    paux->a=aa;paux->b=bb;paux->s=ss;
                    paux->prev=q;paux->next=q->next;
                    q->next->prev=paux;q->next=paux;
                    gata=1;continue;
                  }
                  if(q->b==bb){gata=1;continue;}
		  mic=q->b;mare=bb;smic=q->s;smare=ss;
		  if(mic>mare){aux=mic;mic=mare;mare=aux;
		  aux=smic;smic=smare;smare=aux;}
                  q->b=mic;q->s=smic;aa=mic+1;bb=mare;ss=smare-smic;
                }
         }
        q=u->prev;
        for(i=n;i>=1;i--)
        { if(i!=q->a){ sum[i]=sum[i+1];continue;}
          sum[i]=sum[(q->b)+1]+q->s;
          x[i]=sum[i]-sum[i+1];
          q=q->prev;
        }
        for(i=1;i<=n;i++)
	 printf("%ld ",x[i]);
        return 0;
}