Cod sursa(job #44163)

Utilizator cos_minBondane Cosmin cos_min Data 30 martie 2007 22:06:30
Problema Schi Scor 65
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.86 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
        {
            int size = P.size()-A[i]+1;
            if ( A[i] == 1 ) P.push_front(i);
            else if ( P.size()-A[i]+1 < A[i]-1 ) // sterg de la dreapta la stanga
            {
                 //printf("1 %d|", size );
                 int z=0;
                 for ( it = P.end()-1, z = 1; z <= size; it--, z++ )
                 {
                    // printf("%d ", *it);
                     aux[z] = *it;
                     P.pop_back();
                 }
                 P.push_back(i);
                 for ( int j = size; j >= 1; j-- )
                     P.push_back(aux[j]);
                 //printf(" | ");
            }
            else                          // sterg de la stanga la dreapta
            {
                // printf("2 |");
                 int z=0;
                 for ( it = P.begin(), z = 1; z < A[i]; 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 ", *it);
        
        printf("\n");*/
    }
    
    for ( it = P.begin(); it != P.end(); it++ )
        printf("%d\n", *it);
}