Pagini recente » Cod sursa (job #851434) | Cod sursa (job #60588) | Cod sursa (job #3261044) | Cod sursa (job #2827803) | Cod sursa (job #48058)
Cod sursa(job #48058)
#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;
}