Cod sursa(job #999916)

Utilizator maritimCristian Lambru maritim Data 21 septembrie 2013 17:58:35
Problema Partitie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<iostream>
#include<fstream>
#include<queue>
#include<algorithm>
using namespace std;

ifstream f("partitie.in");
ofstream g("partitie.out");

struct numar
{
    int info,poz;
} ;

typedef struct Compare
{
    bool operator() (const numar a,const numar b)
    {
        return a.info < b.info;
    }
} ICompare;

#define MaxN 300100

int N,L,Sol;
int SolV[MaxN];
numar A[MaxN];

void citire(void)
{
    f >> N >> L;
    for(int i=1;i<=N;A[i].poz = i,i++)
        f >> A[i].info;
}

void Rezolvare(void)
{
    queue<int> coada; 

    sort(A+1,A+N+1,ICompare());

    for(int i=1;i<=N;i++)
    {
        coada.push(A[i].info);

        for(;coada.front() <= A[i].info-L;coada.pop());

        Sol = max(Sol,(int)coada.size());
    }

    for(int i=1;i<=N;i++)
        SolV[A[i].poz] = i%Sol ? i%Sol : Sol;
}

int main()
{
    citire();
    Rezolvare();

    g << Sol << "\n";
    for(int i=1;i<=N;i++)
        g << SolV[i] << "\n";
}