Cod sursa(job #3175551)

Utilizator vladsoartavlad sofronea vladsoarta Data 25 noiembrie 2023 23:13:14
Problema Lupul Urias si Rau Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <fstream>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
ifstream cin("lupu.in");
ofstream cout("lupu.out");

vector<pair<int,int>>v;
set<pair<int,int>>mersvec;
int n,distmax,l,i,j;
long long s;

int main()
{
    cin>>n>>distmax>>l;
    for(i=1; i<=n; i++)
    {
        int a,b;
        cin>>a>>b;
        a = distmax-a;
        if(a<0)
            a=0;
        else
            a=a/l+1;
        v.push_back(make_pair(a,b));
    }
    sort(v.begin(),v.end());
    int cnt=0;
    for(i=0;i<n;i++)
       cout<<v[i].first<<" "<<v[i].second<<'\n';
    for(i=1; i<=n; i++)
    {
        if(v[i].first!=v[i-1].first&&i!=n+1)
        {

            mersvec.insert(make_pair(v[i-1].first,cnt));
        }
        cnt++;
    }
    int pasifacuti=0;
    set<int>oibune;
    for(auto curr:mersvec)
    {
        for(i=curr.second; i>=0&&(i==curr.second||v[i].first==v[i+1].first)&&pasifacuti<curr.first; i--)
        {
            oibune.insert(v[i].second);
            pasifacuti++;
        }

        for(j=i; j>=0&&v[j].first==curr.first; j--)
        {
            if((*oibune.begin())<v[j].second)
            {
                oibune.erase(oibune.begin());
                oibune.insert(v[j].second);
            }
            else
                break;
        }
    }
    for(auto val:oibune)
        s+=val;

    cout<<s;
    return 0;
}