Cod sursa(job #1997425)

Utilizator AndreiCroitoruAndrei Croitoru AndreiCroitoru Data 4 iulie 2017 12:15:09
Problema Lupul Urias si Rau Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include<fstream>
#include<set>
#include<algorithm>
#include<vector>
#define a first
#define b second
using namespace std;
ifstream cin("lupu.in");
ofstream cout("lupu.out");
int n,l,in,b[100005],ma,j=1,x;
long long r;
pair<int,int >v[100005];
typedef pair<int,int >pii;
int cmp(pii A,pii B)
{
    if(A.a<B.a)
        return 1;
    return 0;
}
long long nex(long long g)
{
    if(g%l==0)
        return g;
    return g/l*l+l;
}
multiset<int,greater<int> >z;
int main()
{
    cin>>n>>x>>l;
    for(int i=1; i<=n; i++)
        cin>>v[i].a>>v[i].b;
    if(l==0)
    {
        for(int i=1; i<=n; i++)
            if(v[j].a<=x)
                r+=v[j].b;
    }
    else
    {
        sort(v+1,v+n+1,cmp);
        for(long long i=0; i<=x; i+=l)
        {
            for(; j<=n&&v[j].a<=i; j++)
                z.insert(v[j].b);
            z.insert(0);
            r+=*z.begin();
            z.erase(z.begin());
            if(*z.begin()==0&&i!=x&&b[j]==0)
            {
                i=nex(v[j].a)-l;
                if(i+l>x)
                    i=x-l;
                b[j]=1;
            }
            if(j>n)
                break;
        }
    }
    cout<<r;

}