Pagini recente » Cod sursa (job #1648141) | Cod sursa (job #1113406) | Cod sursa (job #3217618) | Cod sursa (job #2361819) | Cod sursa (job #158226)
Cod sursa(job #158226)
#include <cstdio>
#include <vector>
using namespace std;
vector <int> w,q,b;
int n,m;
void citire()
{
freopen("heavymetal.in","r",stdin);
scanf("%d", &n);
int a,s;
m=0;
w.push_back(0);
q.push_back(0);
for (int i=1; i<=n; i++)
{
scanf("%d%d", &a, &s);
w.push_back(a);
q.push_back(s);
if (s>m)
m=s;
}
fclose(stdin);
}
void rezolvare()
{
b.push_back(0);
int j=1;
for (int i=1; i<=m; i++)
{
b.push_back(b[i-1]);
/*for (int j=1; j<=n; j++)
if (q[j]==i)
if (b[i]<b[w[j]]+(q[j]-w[j]))
b[i]=b[w[j]]+(q[j]-w[j]);*/
while (q[j]==i)
{
if (b[i]<b[w[j]]+(q[j]-w[j]))
b[i]=b[w[j]]+(q[j]-w[j]);
j++;
}
}
}
void sortare(int st, int dr)
{
int x=q[(st+dr)/2];
int i=st, aux;
int j=dr;
do
{
while (q[i]<x)
++i;
while (q[j]>x)
--j;
if (i<=j)
{
aux=q[i];
q[i]=q[j];
q[j]=aux;
aux=w[i];
w[i++]=w[j];
w[j--]=aux;
}
}
while (i<=j);
if (st<j)
sortare(st,j);
if (i<dr)
sortare(i,dr);
}
int main()
{
citire();
sortare(1,n);
rezolvare();
freopen("heavymetal.out","w",stdout);
printf("%d\n",b[m]);
fclose(stdout);
return 0;
}