Pagini recente » Cod sursa (job #1140282) | Diferente pentru planificare/sponsori intre reviziile 20 si 19 | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #1815464)
#include <cstdio>
#include <algorithm>
using namespace std;
pair <int,int> v[100001];
int h[100001];
int cmp (pair <int,int> a,pair <int,int> b){
return a.first>b.first;
}
void adauga (int i,int elem){
int p,c,aux;
h[elem]=v[i].second;
c=elem;
p=elem/2;
while (p>0){
if (h[c]>h[p]){
aux=h[c];
h[c]=h[p];
h[p]=aux;
}
else break;
c=p;
p/=2;
}
}
void sterge (int poz,int elem){
int p,c,aux;
p=poz;
c=2*poz;
while (c<=elem){
if (c+1<=elem && h[c+1]>h[c])
c++;
aux=h[c];
h[c]=h[p];
h[p]=aux;
p=c;
c*=2;
}
}
int main()
{
FILE *fin=fopen ("lupu.in","r");
FILE *fout=fopen ("lupu.out","w");
int n,x,l,i,elem=0,j;
long long sol=0;
fscanf (fin,"%d%d%d",&n,&x,&l);
for (i=1;i<=n;i++){
fscanf (fin,"%d%d",&v[i].first,&v[i].second);
v[i].first=(x-v[i].first)/l+1;
// dupa v[i].first alegeri, oaia i va disparea
}
sort (v+1,v+n+1,cmp);
j=1;
for (i=v[1].first;i>0;i--){
while (j<=n && v[j].first==i){
elem++;
adauga (j,elem);
j++;
}
sol+=h[1];
sterge (1,elem);
}
fprintf (fout,"%lld",sol);
return 0;
}