Cod sursa(job #48058)

Utilizator sdnxptVasiliu Radu sdnxpt Data 4 aprilie 2007 13:06:05
Problema Schi Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <stdio.h>
#define Nmax 30001

typedef int vect[Nmax];

vect poz,nr;
int n;
void Comb(int i,int n)
  {
  int v=poz[i],fiu=i*2,tata=i;
  int v1=nr[i];
  while(fiu<=n)
    {
    if(fiu<n)
      if(poz[fiu]<poz[fiu+1]) fiu++;
    if(v<poz[fiu])
      {
      poz[tata]=poz[fiu];
      nr[tata]=nr[fiu];
      tata=fiu;
      fiu*=2;
      }
    else fiu=n+1;
    }
  poz[tata]=v;
  nr[tata]=v1;
  }

void Crheap()
  {
   int i;
   for(i=n/2;i>=1;i--) Comb(i,n);
   }

void Heapsort()
  {
  int i,aux;
  Crheap();
  for(i=n;i>1;i--)
   {
   aux=poz[i];
   poz[i]=poz[1];
   poz[1]=aux;
   aux=nr[i];
   nr[i]=nr[1];
   nr[1]=aux;
   Comb(1,i-1);
   }
 }
void rezolvare()
  {
  FILE * fin=fopen("schi.in","r");
  fscanf(fin,"%d",&n);
  int i,x,j;
  fscanf(fin,"%d",&x);
  poz[1]=x;
  for(i=2;i<=n;i++) 
    {
    fscanf(fin,"%d",&x);
    poz[i]=x;
    for(j=1;j<i;j++) if(poz[j]>=x) poz[j]++;
    }
  fclose(fin);
  for(i=1;i<=n;i++) nr[i]=i;
  Heapsort();
  FILE * fout=fopen("schi.out","w");
  for(i=1;i<=n;i++) fprintf(fout,"%d\n",nr[i]);
    
}

int main()
  {
  rezolvare();
  return 0;
}