Nu aveti permisiuni pentru a descarca fisierul grader_test10.in
Cod sursa(job #94313)
Utilizator | Data | 22 octombrie 2007 17:18:12 | |
---|---|---|---|
Problema | Orase | Scor | 40 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.12 kb |
#include <stdio.h>
long d[50000],s[50000];
long b[50000],c[50000];
long n,m,i,j,max,poz;
FILE *f1,*f2;
void inter(int p, int r)
{
int q=(p+r)/2;
int i=p,j=q+1,t=p-1;
while (i<=q && j<=r)
if (d[i]<=d[j])
{
t++;
b[t]=d[i];
c[t]=s[i];
i++;
}
else
{
t++;
b[t]=d[j];
c[t]=s[j];
j++;
}
while (i<=q)
{
t++;
b[t]=d[i];
c[t]=s[i];
i++;
}
while (j<=r)
{
t++;
b[t]=d[j];
c[t]=s[j];
j++;
}
for (i=p; i<=r; i++)
{
d[i]=b[i];
s[i]=c[i];
}
}
void merge(int p, int r)
{
if (p<r)
{
int q=(p+r)/2;
merge(p,q);
merge(q+1,r);
inter(p,r);
}
}
int main()
{
FILE *f1,*f2;
f1=fopen("orase.in","r");
f2=fopen("orase.out","w");
fscanf(f1,"%ld%ld",&m,&n);
for (i=1; i<=n; i++)
fscanf(f1,"%ld%ld",&d[i],&s[i]);
merge(1,n);
max=0;poz=1;
for (i=2; i<=n; i++)
{
j++;
if (s[poz]+s[i]+d[i]-d[poz]>max)
max=s[poz]+s[i]+d[i]-d[poz];
if (s[j]+s[i]+d[i]-d[j]>max)
{
max=s[j]+s[i]+d[i]-d[j];
poz=j;
}
}
fprintf(f2,"%ld\n",max);
fclose(f1);
fclose(f2);
return 0;
}