Cod sursa(job #44134)

Utilizator cos_minBondane Cosmin cos_min Data 30 martie 2007 21:45:12
Problema Schi Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.55 kb
#include <stdio.h>
#include <deque>
using namespace std;

#define in "schi.in"
#define out "schi.out"
#define dim 30001

int N;
int A[dim], aux[dim];
deque<int> P;
deque<int>::iterator it;

int main()
{
    freopen(in,"r",stdin);
    freopen(out,"w",stdout);
    
    scanf("%d", &N);
    for ( int i = 1; i <= N; i++ )
        scanf("%d", &A[i]);
    
    P.push_back(1);
    for ( int i = 2; i <= N; i++ ) 
    {
        if ( A[i] > P.size() ) P.push_back(i);
        else
        {
            if ( A[i] == 1 ) P.push_front(i);
            else if ( P.size()-A[i] < A[i] ) // sterg de la dreapta la stanga
            {
                 int z=0;
                 for ( it = P.end()-1, z = 1; z <= P.size()-A[i]+1; it--, z++ )
                 {
                     aux[z] = *it;
                     P.pop_back();
                 }
                 P.push_back(i);
                 for ( int j = 1; j < z; j++ )
                     P.push_back(aux[j]);
            }
            else                          // sterg de la stanga la dreapta
            {
                 int z=0;
                 for ( it = P.begin(), z = 1; z <= A[i]-1; it++, z++ )
                 {
                     aux[z] = *it;
                     P.pop_front();
                 }
                 P.push_front(i);
                 for ( int j = z-1; j >= 1; j-- )
                     P.push_front(aux[j]);
                
            }
        }
    }
    
    for ( it = P.begin(); it != P.end(); it++ )
        printf("%d\n", *it);
}