Pagini recente » Cod sursa (job #554840) | Cod sursa (job #1851746) | Cod sursa (job #711792) | Cod sursa (job #3128656) | Cod sursa (job #70053)
Cod sursa(job #70053)
#include<stdio.h>
long int n,m,d[50001],l1[50001],l2[50001],i,p,face,up,down,d1,d2,d3,sol,aux;
int swap(long int i1,long int i2);
int heapdown(long int ic,long int nc);
int main()
{
FILE *f,*g;
f=fopen("orase.in","r");
g=fopen("orase.out","w");
fscanf(f,"%ld%ld",&m,&n);
for(i=1;i<=n;i++)
fscanf(f,"%ld%ld",&d[i],&l1[i]);
for(i=n/2;i>=1;i--)
heapdown(i,n);
for(i=n;i>=1;i--)
{swap(1,i);heapdown(1,i-1);}
p=1;
for(i=2;i<=n;i++)
{
if(d[i]==d[i-1])l2[p]=l1[i];
else {p++;d[p]=d[i];l1[p]=l1[i];}
}
for(i=p;i>=1;i--)d[i]-=d[i-1];
d[1]=0;
face=(l1[1]>l2[1])?l1[1]:l2[1];
if(l1[1]&&l2[1]) sol=l1[1]+l2[1];
for(i=2;i<=p;i++)
{
face+=d[i];
up=l1[i];
down=l2[i];
if(down)
{ d1=face+up;sol=(d1>sol)?d1:sol;
d2=face+down;sol=(d2>sol)?d2:sol;
d3=up+down;sol=(d3>sol)?d3:sol;
face=(face>up)?face:up;
face=(face>down)?face:down;
}
else
{ d1=face+up;sol=(d1>sol)?d1:sol;
face=(face>up)?face:up;
}
}
fprintf(g,"%ld",sol);
fcloseall();
return 0;
}
int swap(long int i1,long int i2)
{
aux=d[i1];d[i1]=d[i2];d[i2]=aux;
aux=l1[i1];l1[i1]=l1[i2];l1[i2]=aux;
aux=l2[i1];l2[i1]=l2[i2];l2[i2]=aux;
return 0;
}
int heapdown(long int ic,long int nc)
{
long int is=2*ic,is1=2*ic+1;
if(is>nc)return 0;
if(is<nc) if(d[is1]>d[is]) is=is1;
if(d[is]>d[ic]){ swap(ic,is);heapdown(is,nc);}
return 0;
}