Cod sursa(job #806619)

Utilizator auRSTARHreapca Aurelian auRSTAR Data 3 noiembrie 2012 10:20:18
Problema Lupul Urias si Rau Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
vector<int> S[100010],V;
int n,m,l,x,y,a,niv,nivmax,i,cnt;
long long SOL;
int main()
{
    freopen("lupu.in","r",stdin);
    freopen("lupu.out","w",stdout);
    scanf("%d%d%d",&n,&m,&l);
    for(i=1;i<=n;i++)
    {
        scanf("%d%d",&x,&y);
        a=m-x;
        if(a<0)continue;
        niv=a/l+1;
        if(niv>10000){SOL+=niv;continue;}
        if(niv>nivmax)nivmax=niv;
        S[(a/l)+1].push_back(-y);
    }
    for(i=1;i<=nivmax;i++)
    {
        sort(S[i].begin(),S[i].end());
        if(S[i].size()>i)S[i].resize(i);
        a=S[i].size();
        V.resize(V.size()+a);
        V.insert(V.begin()+a,S[i].begin(),S[i].end());
        sort(V.begin(),V.end());
        V.resize(i);
    }
    for(vector<int>::iterator it=V.begin();it!=V.end();it++)
        SOL+=(long long)(-(*it));
    printf("%lld\n",SOL);
    return 0;
}