Pagini recente » Cod sursa (job #1364742) | Cod sursa (job #301881) | Cod sursa (job #1179134) | Cod sursa (job #1767377) | Cod sursa (job #758007)
Cod sursa(job #758007)
#include<stdio.h>
#include<vector>
#include<algorithm>
#include<set>
#include<stdlib.h>
using namespace std;
FILE *f = fopen("reconst.in","r");
FILE *g = fopen("reconst.out","w");
typedef struct
{
short 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
typedef set<pair<pair<sh,sh>, int> >::iterator it;
int N,M;
numar A[MaxM];
//vector<numar> A;
//set<pair<pair<sh,sh>, int> > B;
inline numar CreareNumar(sh b,sh 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);
}
inline int min(int a,int b)
{
return a < b ? a : b;
}
inline int max(int a,int b)
{
return a > b ? a : b;
}
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;
}
}
inline void DeplasareStanga(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 > 1;)
{
numar aux = A[a];
A[a] = A[a-1];
A[--a] = aux;
}
}
void Rezolvare(void)
{
sort(A+1,A+N+1,ICompare());
for(int i=1;i<=M;i++)
for(int j=i+1;A[i].x == A[j].x && j<=M;j++)
{
A[j] = CreareNumar(min(A[i].y,A[j].y)+1,max(A[i].y,A[j].y),A[i].y > A[j].y ? A[i].a-A[j].a : A[j].a-A[i].a);
DeplasareDreapta(j);
//afisare();
}
for(int i=M;i;i--)
for(int j=i-1;A[i].y == A[j].y && j;j--)
{
A[j] = CreareNumar(min(A[i].x,A[j].x),max(A[i].x,A[j].x)-1,A[i].x < A[j].x ? A[i].a-A[j].a : A[j].a-A[i].a);
DeplasareStanga(j);
//afisare();
}
}
int main()
{
citire();
Rezolvare();
for(int i=1;i<=M;i++)
{
fprintf(g,"%d ",A[i].a);
for(int j=A[i].x+1;j<=A[i].y;j++)
fprintf(g,"0 ");
}
}