Pagini recente » Cod sursa (job #3240418) | Cod sursa (job #2854437) | Cod sursa (job #2444345) | Cod sursa (job #1391819) | Cod sursa (job #189083)
Cod sursa(job #189083)
#include<fstream.h>
#include<stdlib.h>
#define g 1000
struct list
{
long s,f,e;
};
list a[g];
int sz,c;
int compare (const void *a, const void *b)
{
return ((((list*)a)->f) - (((list*)b)->f));
}
long vissza (int k)
{
long j=k+1,r,h=-1;
c=0;
r=a[j].f-a[j].s;
while (k>=0 && r>c)
{
if (a[k].e!=-2)
{
if (a[k].f<a[j].s)
{ h=k; break; }
c+=a[k].f-a[k].s;
k=a[k].e;
}
}
return h;
}
int main()
{
ifstream be ("heavymetal.in");
ofstream ki ("heavymetal.out");
long n,i,j,last,u;
be>>n;
for (i=0;i<n;i++)
{ be>>a[i].s>>a[i].f; a[i].e=-2; }
be.close();
qsort (a,n,sizeof(list),compare);
sz=0;
sz=a[0].f-a[0].s;
last=0; a[0].e=-1;
for (i=1;i<n;i++)
{
if (a[last].f<=a[i].s)
{
a[i].e=last;
last=i;
u=a[i].f-a[i].s;
sz+=a[i].f-a[i].s;
}
else
{
if (a[i].f-a[i].s>u)
{
j=vissza(last);
if (j!=-1)
{
a[i].e=j;
sz-=c;
sz+=a[i].f-a[i].s;
}
}
}
}
ki<<sz<<'\n';
ki.close();
return 0;
}