Cod sursa(job #1401999)

Utilizator cypry97Dascalitei Ciprian cypry97 Data 26 martie 2015 11:40:29
Problema Partitie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <queue>
using namespace std;

struct elem
{
    int val,poz;
    elem ( int val=0, int poz=0):
        val(val), poz(poz)
    {
    }
};

int N,D;
elem V[300008];
int S[300008];
int K;
queue < int > Q;

ifstream fin("partitie.in");
ofstream fout("partitie.out");

void Citire()
{
    int i,x;
    fin>>N>>D;
    for(i=1;i<=N;i++)
    {
        fin>>x;
        V[i]=elem(x,i);
    }
    sort(V+1,V+N+1,[] (elem a, elem b) { return a.val<b.val;});
}

void Rezolvare()
{
    int i,p;
    K++;
    S[V[1].poz]=1;
    Q.push(1);
    for(i=2;i<=N;i++)
    {
        p=Q.front();
        if(V[i].val-D>=V[p].val)
        {
            Q.pop();
            S[V[i].poz]=S[V[p].poz];
            Q.push(i);
        }
        else
        {
            S[V[i].poz]=++K;
            Q.push(i);
        }
    }
}

void Afisare()
{
    fout<<K<<'\n';
    for(int i=1;i<=N;i++)
        fout<<S[i]<<'\n';
}

int main()
{
    Citire();
    Rezolvare();
    Afisare();
    return 0;
}