Cod sursa(job #1012968)

Utilizator RaduGabriel2012Dinu Radu RaduGabriel2012 Data 19 octombrie 2013 23:14:25
Problema Partitie Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("partitie.in");
ofstream g("partitie.out");

struct vec
{int v,p;};

bool comp(vec x,vec y)
{return x.v<y.v;}

int n,sol[200005],last[400005],snum[400005],ord=0,st,dr,d;

vec a[200005];
int main()
{  int i;
   f>>n>>d; //cout<<n;
  for(i=1;i<=n;i++)
    {f>>a[i].v; a[i].p=i;}
     sort(a+1,a+n+1,comp);
   st=1; dr=1; sol[a[1].p]=1;
    last[1]=1; snum[1]=1; //sel[1]=1;
   ord=1;
    for(i=2;i<=n;i++)
     if (a[i].v-last[st]>=d)
        { st++; dr++;
           last[dr]=a[i].v;
           snum[dr]=snum[st-1];
           sol[a[i].p]=snum[dr];
        }
      else
       { dr++; ord++;
         snum[dr]=ord;
         last[dr]=a[i].v;
         sol[a[i].p]=ord;
       }
     g<<ord<<"\n";
  for(i=1;i<=n;i++)
   g<<sol[i]<<"\n";
    return 0;
}