Cod sursa(job #125130)

Utilizator razvi9Jurca Razvan razvi9 Data 20 ianuarie 2008 11:33:00
Problema Partitie Scor 50
Compilator cpp Status done
Runda preONI 2008, Runda 3, Clasa a 9-a Marime 0.75 kb
#include<stdio.h>
int n,k,a[300010],b[300010],c[300010],m,i,nr,x;

int poz(int i,int j)
{int x=0,y=-1,aux;
 while(i<j){
 if(a[b[i]]>a[b[j]]) {aux=b[i];b[i]=b[j];b[j]=aux;aux=x;x=-y;y=-aux;}
 i=i+x;j=j+y;}
 return i;}

void sort(int i,int j)
{if(i>=j) return;
 int k=poz(i,j);
 sort(i,k-1);
 sort(k+1,j);}

int main()
{freopen("partitie.in","r",stdin);
 freopen("partitie.out","w",stdout);
 scanf("%d %d",&n,&k);
 for(i=1;i<=n;i++) {scanf("%d",&a[i]);b[i]=i;}
 sort(1,n);
 while(nr<n)
 {m++;
  for(i=1;i<=n;i++) if(!c[b[i]]) break;
  nr++;
  x=a[b[i]];c[b[i]]=m;
  for(i=i+1;i<=n;i++)
   if(!c[b[i]]&&a[b[i]]-x>=k) {x=a[b[i]];c[b[i]]=m;nr++;}}
 printf("%d\n",m);
 for(i=1;i<=n;i++) printf("%d\n",c[i]);
 fclose(stdout);
 return 0;}