Cod sursa(job #2785430)

Utilizator AndreidreiGresoiu Liviu-Andrei Andreidrei Data 18 octombrie 2021 17:54:33
Problema Lupul Urias si Rau Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <bits/stdc++.h>
#define din cin
#define dout out
#define pi 3.14159265359
#define sw(x,y) x^=y,y^=x,x^=y
#define bmin(a,b)((a<b)?(a):(b))
#define bmax(a,b)((a>b)?(a):(b))
#define ll long long
using namespace std;
ifstream in("lupu.in");
ofstream out("lupu.out");
long long n,x,d,i,j,l,s;
struct t{int p,v;}a[100001],h[100001];
inline constexpr bool f(t a,t b){return a.p>b.p;}
inline constexpr bool g(t a,t b){return a.v<b.v;}
int main()
{
in>>n>>x>>d;
for(i=0;i<n;i++)
{
    in>>a[i].p>>a[i].v;
    if(a[i].p>x)
        i--,n--;
        else a[i].p=(x-a[i].p)/d;
}
sort(a,a+n,f);
//for(i=0;i<n;i++)cout<<a[i].p<<' '<<a[i].v<<'\n';cout<<"\n\n\n\n";
a[n].p=-1;
i=0;
while(i<n){
    j=a[i].p;
    while(i<n&&a[i].p==j)h[l++]=a[i++],push_heap(h,h+l,g);
    j=bmin(l,j-a[i].p);
    while(j--){
        s+=h[0].v;pop_heap(h,h+l,g);l--;
    }
}
out<<s;
}