Cod sursa(job #184887)

Utilizator K0nTr0LBucatea Madalin Stefan K0nTr0L Data 24 aprilie 2008 14:30:55
Problema Heavy metal Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<stdio.h>
#define max(a,b) a>=b?a:b
#define N 100001
int n,m,i,j,k,p,b[N];
struct in{
int a,b;
} a[N],x;

void heap(int i){
int s,d,max;
while(i<<1<=m){
 s=i<<1;d=s+1;max=i;
  if(a[max].b<a[s].b)
   max=s;
  if(d<=m&&a[max].b<a[d].b)
   max=d;
  if(max-i){
   x=a[i];
   a[i]=a[max];
   a[max]=x;
   i=max;
  }
  else
   return;
}
}

int main(){
FILE *in=fopen("heavymetal.in","r"),*out=fopen("heavymetal.out","w");
fscanf(in,"%d",&n);
for(i=1;i-n-1;i++)
 fscanf(in,"%d%d",&a[i].a,&a[i].b);
m=n;
for(i=n>>1;i;i--)
 heap(i);
for(;m;){
 x=a[1];
 a[1]=a[m];
 a[m]=x;
 m--;
 heap(1);
}
b[1]=a[1].b-a[1].a;
for(i=2;i-n-1;i++){
 b[i]=b[i-1];
  for(j=i-1;j;j--)
   b[i]=max(b[i],b[j]+(a[i].b-a[i].a)*(a[i].a>=a[j].b));
}
fprintf(out,"%d\n",b[n]);
return 0;
}