Pagini recente » Cod sursa (job #3150092) | Cod sursa (job #1863037) | Cod sursa (job #6010) | Cod sursa (job #2856709) | Cod sursa (job #138133)
Cod sursa(job #138133)
#include<stdio.h>
long int n,nn,i,j,k,a[200002],pv[200002],pn[200002],max,maxx[200002],aux;
void sh(long int i1,long int i2);
void hd(long int ic,long int nc);
int main()
{
FILE *f,*g;f=fopen("heavymetal.in","r");g=fopen("heavymetal.out","w");
fscanf(f,"%ld",&n);
nn=2*n;
for(i=1;i<=nn;i++)
{ fscanf(f,"%ld",&a[i]);pv[i]=i;pn[i]=i;}
for(i=nn/2;i>=1;i--)hd(i,nn);
for(i=nn;i>=1;i--){sh(1,i);hd(1,i-1);}
max=0;
i=1;
while(i<=nn)
{ if(pv[i]%2==0)
{ j=i+1;
while((a[i]==a[j])&&(pv[j]%2==0))j++;
for(k=i;k<j;k++)maxx[k]=a[k]-a[pn[pv[k]-1]]+maxx[pn[pv[k]-1]];
for(k=i;k<j;k++)if(max<maxx[k])max=maxx[k];
i=j;
}
else
{maxx[i]=max;i++;}
}
fprintf(g,"%ld\n",max);
fcloseall();
return 0;
}
void sh(long int i1,long int i2)
{
aux=a[i1];a[i1]=a[i2];a[i2]=aux;
aux=pv[i1];pv[i1]=pv[i2];pv[i2]=aux;
pn[pv[i1]]=i1;pn[pv[i2]]=i2;
}
void hd(long int ic,long int nc)
{
long int is,is1;
is=2*ic;is1=ic+1;
if(is>nc)return;
if(is<nc)
if((a[is1]>a[is])||((a[is1]==a[is])&&(pv[is1]%2)&&(pv[is]%2==0)))
is=is1;
if((a[is]>a[ic])||((a[is]==a[ic])&&(pv[is]%2)&&(pv[ic]%2==0)))
{sh(is,ic);hd(is,nc);}
}