Pagini recente » Cod sursa (job #571235) | Cod sursa (job #303241) | Cod sursa (job #740586) | Cod sursa (job #768753) | Cod sursa (job #342540)
Cod sursa(job #342540)
#include <fstream.h>
#define MaxN 100009
long d[MaxN],l[MaxN],T[MaxN],pos[MaxN],T_max,X,L,n,s,k;
void cit()
{
int i;
ifstream fin("lupu.in");
fin>>n>>X>>L;
for(i=1;i<=n;i++)
fin>>d[i]>>l[i];
fin.close();
}
void swap(int i,int j)
{
long aux=d[i]; d[i]=d[j]; d[j]=aux;
aux=l[i]; l[i]=l[j]; l[j]=aux;
}
void poz(int li,int ls)
{
long i=0,j=-1,c;
while(li<ls)
{
if(d[li]>d[ls])
{
swap(li,ls);
c=i; i=-j; j=-c;
}
li+=i; ls+=j;
}
k=li;
}
void quick(int li,int ls)
{
if(li<ls)
{
poz(li,ls);
quick(li,k-1);
quick(k+1,ls);
}
}
void timp()
{
long t=0,i=n,nr=0;
while(d[i]>X && i>=1)
i--;
while(i>=1)
{
while(d[i]+t>X && i>=1)
T[i]=nr, pos[nr]=i, i--;
nr++;
t+=L;
}
T_max=nr-1;
}
void sol()
{
int i,j=1,max=0,max_a=0,nr=0;
for(i=T_max;i>=1;i--)
{
if(nr>1)
max=max_a;
else
max=0;
k=pos[i];
nr=1;
if(l[k]>max)
max=max_a=l[k];
k++;
while(T[k]==i && k<=n)
{
if(l[k]>max)
max_a=max, max=l[k];
k++;
}
s+=max;
}
}
void afis()
{
ofstream fout("lupu.out");
fout<<s;
fout.close();
}
int main()
{
cit();
quick(1,n);
timp();
sol();
afis();
return 0;
}