#include #include #include #define MAX 100010 int n, poleX[MAX], poleY[MAX], delkaH[MAX], delkaV[MAX]; /* 1=SMER Horizont - * 0=SMER VERT | */ int recurseV(int bod); int recurseH(int bod) { int i, max=-1, min=-1, maxc=-1, minc=-1; if (delkaH[bod]==-1) { for (i=0;ipoleY[min]) { min=i; } } } else { if (max==-1) { max=i; } else { if (poleY[i]0) { maxc=recurseV(max); if (maxc>0) { maxc+=abs(poleY[max]-poleY[bod]); } } if (min>0) { minc=recurseV(min); if (minc>0) { minc+=abs(poleY[min]-poleY[bod]); } } if ((maxc>0)&&(minc>0)) { delkaH[bod]= maxc>minc ? maxc : minc; } else if (maxc>0) { delkaH[bod]=maxc; } else if (minc>0) { delkaH[bod]=minc; } else { delkaH[bod]=-2; } } return delkaH[bod]; } int recurseV(int bod) { int i, max=-1, min=-1, maxc=-1, minc=-1; if (delkaV[bod]==-1) { for (i=0;ipoleX[min]) { min=i; } } } else { if (max==-1) { max=i; } else { if (poleX[i]0) { maxc=recurseH(max); if (maxc>0) { maxc+=abs(poleX[max]-poleX[bod]); } } if (min>0) { minc=recurseH(min); if (minc>0) { minc+=abs(poleX[min]-poleX[bod]); } } if ((maxc>0)&&(minc>0)) { delkaV[bod]= maxc>minc ? maxc : minc; } else if (maxc>0) { delkaV[bod]=maxc; } else if (minc>0) { delkaV[bod]=minc; } else { delkaV[bod]=-2; } } return delkaV[bod]; } int zpracuj() { int i, h, v; for (i=0;i