Cod sursa(job #80690)

Utilizator blasterzMircea Dima blasterz Data 29 august 2007 13:11:15
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
using namespace std;
#include <cstdio>
#include <cmath>
#include <deque>
#define maxn 30001


deque<short int>x[300];
short len[300];

int n;

void read()
{
	freopen("schi.in","r",stdin);
	scanf("%d\n", &n);
	int i;
	int T=(int)sqrt(n)+1;
	int p, poz, r,aux;
	
	
	for(i=1;i<=n;++i)
	{
		scanf("%d", &p);
		--p;
		poz=p/T;
		r=p%T;
	//	printf("%d\n", r);
		
		if(x[poz].size()==0 ) x[poz].push_back(i);
	//else if(r==0) x[poz].push_front(i);
 	else	x[poz].insert(x[poz].begin()+r, (short)i);
		
//		printf("da\n");
//		for(int j=0;j<x[poz].size();++j)printf("%d ", x[poz][j]);
//		printf("\n");
		while(x[poz].size()>T)
		{
			aux=x[poz][x[poz].size()-1];
			x[poz].pop_back();
			x[poz+1].push_front(aux);
			++poz;
		}
		//for(int j=0;j<x[p/T].size();++j)printf("%d ", x[p/T][j]);
		//printf("\n");
	/*
for(int j=0;j<300;++j) 
		if(x[j].size())
			for(int k=0;k<x[j].size();++k)printf("%d ", x[j][k]);
	printf("\n\n");	
*/	}
	
}

int main()
{
	
	read();
	freopen("schi.out","w",stdout);
	//	printf("\n\n");
	int i, j;
	for(i=0;i<300;++i) 
		if(x[i].size())
			for(j=0;j<x[i].size();++j)printf("%d\n", x[i][j]);
	return 0;

}