Cod sursa(job #1623927)

Utilizator hrazvanHarsan Razvan hrazvan Data 1 martie 2016 22:48:41
Problema Partitie Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <stdio.h>
#define MAXN 300000
int v[MAXN], point[MAXN], rez[MAXN];

void qs(int st, int dr){
  int i = st, j = dr, piv = v[point[(st + dr) / 2]], aux;
  while(i <= j){
    while(v[point[i]] < piv)
      i++;
    while(v[point[j]] > piv)
      j--;
    if(i <= j){
      aux = point[i];  point[i] = point[j];  point[j] = aux;
      i++;  j--;
    }
  }
  if(st < j)
    qs(st, j);
  if(i < dr)
    qs(i, dr);
}

int main(){
  FILE *in = fopen("partitie.in", "r");
  int n, d, i, nr = 0, st;
  fscanf(in, "%d%d", &n, &d);
  for(i = 0; i < n; i++){
    fscanf(in, "%d", &v[i]);
    point[i] = i;
  }
  fclose(in);
  qs(0, n - 1);
  st = 0;
  for(i = 0; i < n; i++){
    while(v[point[i]] - v[point[st]] >= d)
      st++;
    if(nr < i - st + 1)
      nr = i - st + 1;
  }
  FILE *out = fopen("partitie.out", "w");
  fprintf(out, "%d\n", nr);
  for(i = 0; i < n; i++)
    rez[point[i]] = i % nr;
  for(i = 0; i < n; i++)
    fprintf(out, "%d\n", rez[i] + 1);
  fclose(out);
  return 0;
}