Cod sursa(job #197684)

Utilizator toni2007Pripoae Teodor Anton toni2007 Data 5 iulie 2008 13:53:16
Problema Reconst Scor 0
Compilator c Status done
Runda Junior Challenge 2008 Marime 2.41 kb
#include <stdio.h>
#include <stdlib.h>
#define fin  "reconst.in"
#define fout "reconst.out"
#define N 2010
typedef struct poz poz;
struct poz{
       int a,b,c;
};
poz *v;
int n,m;
int cmp(const void *a,const void *b){
    poz *aa=(poz*)a,*bb=(poz*)b;
    if (aa->a>bb->a)
       return 1;
    if (aa->a<bb->a)
       return -1;
    if (aa->b>bb->b)
       return 1;
    if (aa->b<bb->b)
       return -1;
    return 0;
}
int cmp2(const void *a,const void *b){
    poz *aa=(poz*)a,*bb=(poz*)b;
    if (aa->b>bb->b)
       return 1;
    if (aa->b<bb->b)
       return -1;
    if (aa->a>bb->a)
       return 1;
    if (aa->a<bb->a)
       return -1;
    return 0;
}
int nr;
void scan(void){
     int i,a,b,c;
     freopen(fin,"r",stdin);
     freopen(fout,"w",stdout);
     scanf("%d%d",&n,&m);
     for (i=1;i<=m;++i){
         scanf("%d%d%d",&a,&b,&c);
         ++nr;
         v=(poz*)realloc(v,(nr+1)*sizeof(poz));
         v[nr]=(poz){a,b,c};
     }
}
void sort(void){
     qsort(v+1,nr,sizeof(v[0]),cmp);
}
int cun[N];
void insert(int a,int b,int c){
     ++nr;
     v=(poz*)realloc(v,(nr+1)*sizeof(poz));
     v[nr]=(poz){a,b,c};
}
void solve(void){
     int i,j,nn;
     nn=nr;
     for (i=1;i<=n;++i){
         while (v[i].a==v[i+1].a)
               ++i;
         for (j=i+1;v[j].b==v[i].b && j<=nn;++j){
                  insert(v[i].b+1,v[j].b,v[j].c-v[i].c);
              }
     }
     qsort(v+1,nr,sizeof(v[0]),cmp2);
     for (i=1;i<=n;++i){
         while (v[i].b==v[i+1].b)
               ++i;
         for (j=i+1;v[j].b==v[i].b && j<=nn;++j){
                  insert(v[i].a,v[j].a-1,v[j].c-v[i].c);
              }
     }
     qsort(v+1,nr,sizeof(v[0]),cmp);
     for (i=1;i<nn;++i){
         if (v[i].a==v[i+1].a && v[i].b==v[i+1].b-1)
            cun[v[i+1].b]=v[i+1].c-v[i].c;
         /*else{
              for (j=i+1;v[j].a==v[i].a && j<=nn;++j){
                  insert(v[i].b+1,v[j].b,v[j].c-v[i].c);
              }
         }*/
     }
     qsort(v+1,nr,sizeof(v[0]),cmp2);
     nn=nr;
     for (i=1;i<nn;++i){
         if (v[i].b==v[i+1].b && v[i].a==v[i+1].a-1)
            cun[v[i].a]=v[i+1].c-v[i].c;
         /*else{
              
         }*/
     }
     for (i=1;i<=n;++i)
         printf("%d ",cun[i]);
}
void print(void){
     exit(0);
}
int main(void){
    scan();
    sort();
    solve();
    print();
    return 0;
}