Pagini recente » Istoria paginii runda/x-treme_april_challenge | Istoria paginii utilizator/nico_ | Cod sursa (job #1230468) | Cod sursa (job #2372079) | Cod sursa (job #279009)
Cod sursa(job #279009)
#include<stdio.h>
#define nmax 100010
int d[nmax], l[nmax], h[nmax], m, n, nh;
FILE *f, *g;
void ins(int x)
{ int k, z;
h[++nh]=x;
k=nh;
while(l[h[k/2]]>l[h[k]] && k<n)
{ z=h[k]; h[k]=h[k/2]; h[k/2]=z;
k=k/2;
}
}
void del(int k)
{ int z, m;
z=h[nh]; h[nh]=h[k]; h[k]=z;
nh--;
while(( (l[h[k]]>l[h[2*k]] && 2*k<=nh) ||
(l[h[k]]>l[h[2*k+1]] && 2*k+1<=nh) ) && k<nh)
{ if(2*k==nh) m=2*k;
else if(l[h[2*k+1]]>l[h[2*k]]) m=2*k;
else m=2*k+1;
z=h[k]; h[k]=h[m]; h[m]=z;
k=m;
}
}
int mod(int x)
{ if(x<0)
return (-1)*x;
return x;
}
int main()
{ int i, j, max=-1, x, y, d1;
f=fopen("orase.in", "r");
g=fopen("orase.out", "w");
fscanf(f, "%d%d", &m, &n);
for(i=1; i<=n; i++)
{ fscanf(f, "%d%d", &d[i], &l[i]);
ins(i);
}
while(nh)
del(1);
for(i=1; i<=50; i++)
for(j=i+1; j<=50; j++)
{ x=h[i]; y=h[j];
d1=mod(d[x]-d[y]);
if(l[x]+l[y]+d1>max )
max=l[x]+l[y]+d1;
}
fprintf(g, "%d\n", max);
fclose(g);
return 0;
}