Pagini recente » Cod sursa (job #437264) | Cod sursa (job #79218) | Cod sursa (job #1840635) | Cod sursa (job #2648501) | Cod sursa (job #922041)
Cod sursa(job #922041)
#include<fstream>
#define NM 400001
#include<algorithm>
using namespace std;
ifstream f("lupu.in");
ofstream g("lupu.out");
struct el{ int t,a; }v[NM];
int cm(el A,el B){ return A.t<B.t; }
int sol,TM,h[NM],i,x,d,l,n;
int ma(int a,int b)
{
if(h[a]>h[b])
return a;
return b;
}
void urca(int k)
{
while(h[k]>h[k>>1])
{
h[k]^=h[k>>1]^=h[k]^=h[k>>1];
k>>=1;
}
}
void coboara(int k)
{
while(h[k]<h[k<<1]||h[k]<h[(k<<1)+1])
{
int c;
if(h[(k<<1)+1]==0)
c=(k<<1);
else
c=ma(k<<1,(k<<1)+1);
h[k]^=h[c]^=h[k]^=h[c];
k=c;
}
}
int main ()
{
f>>n>>x>>l;
for(i=1;i<=n;++i)
{
f>>d>>v[i].a;
v[i].t=(x-d)/l+1;
if(v[i].t>TM)
TM=v[i].t;
}
h[0]=1<<30;
sort(v+1,v+n+1,cm);
for(i=TM;i>=1;--i)
{
while(v[n].t==i)
{
h[++x]=v[n].a;
urca(x);
--n;
}
sol+=h[1];
h[1]^=h[x]^=h[1]^=h[x];
--x;
coboara(1);
}
g<<sol;
return 0;
}