Pagini recente » Cod sursa (job #3132115) | Cod sursa (job #1681015) | Cod sursa (job #1601341) | Cod sursa (job #1885000) | Cod sursa (job #758070)
Cod sursa(job #758070)
#include<stdio.h>
#include<algorithm>
#include<stdlib.h>
using namespace std;
FILE *f = fopen("reconst.in","r");
FILE *g = fopen("reconst.out","w");
typedef struct
{
int x,y;
int a;
} numar;
typedef struct Compare
{
bool operator() (const numar a,const numar b) { if(a.x == b.x) return a.y < b.y; return a.x < b.x; }
} ICompare;
#define MaxN 2010
#define MaxM 2010
#define sh short int
int N,M;
numar A[MaxM];
int B[MaxN],C[MaxN];
int Sf[MaxN],In[MaxN];
inline numar CreareNumar(int b,int c,int d)
{
numar a = {b,c,d};
return a;
}
void citire(void)
{
fscanf(f,"%d %d",&N,&M);
for(int i=1;i<=M;i++)
fscanf(f,"%d %d %d",&A[i].x,&A[i].y,&A[i].a);
}
void afisare(void)
{
for(int i=1;i<=M;i++)
printf("%d %d %d\n",A[i].x,A[i].y,A[i].a);
printf("\n");
}
inline void DeplasareDreapta(int a)
{
for(;(A[a].x > A[a+1].x || (A[a].x == A[a+1].x && A[a].y > A[a+1].y)) && a < M;)
{
numar aux = A[a];
A[a] = A[a+1];
A[++a] = aux;
}
}
void CreareSir(void)
{
for(int i=1;i<=M;i++)
In[A[i].x] = A[i].a,Sf[A[i].x] = A[i].y;
for(int i=N;i;B[i] = C[i] + B[i+1],i--)
if(Sf[i])
C[i] = In[i]-(B[i+1]-B[Sf[i]+1]);
}
void Rezolvare(void)
{
sort(A+1,A+M+1,ICompare());
for(int i=1;i<=M;i++)
for(int j=i+1;A[i].x == A[j].x && j<=M;)
{
A[j] = CreareNumar(A[i].y+1,A[j].y,A[j].a-A[i].a);
DeplasareDreapta(j);
// afisare();
}
CreareSir();
}
int main()
{
citire();
Rezolvare();
for(int i=1;i<=N;i++)
fprintf(g,"%d ",C[i]);
}