#include <stdio.h>
#include <stdlib.h>

long *readseq(long *length);

int main() {
    long *seq, length, *sub, sublen = 0, *t, i, j;
    long val, last, a, b, m;
    seq = readseq(&length);
    sub = (long *)malloc(length*sizeof(long));
    t = (long *)malloc(length*sizeof(long));
    sub[0] = 1;
    t[0] = seq[0];
    last = 0;
    for (i = 1 ; i < length ; i++) {
        val = seq[i];
        if (val <= t[0]) {
            t[0] = val;
            sub[i] = 1;
        } else if (val >= t[last]) {
            if (val > t[last]) {
                last++;
                sub[i] = last + 1;
                t[last] = val;
            } else sub[i] = last + 1;
        } else {
            a = 0;
            b = last;
            while (1) {
                if (b - a <= 1) {
                    sub[i] = b + 1;
                    t[b] = val;
                    break;
                } else {
                    m = (a + b)/2;
                    if (val == t[m]) {
                        sub[i] = m + 1;
                        break;
                    } else if (val < t[m]) b = m;
                    else a = m;
                }
            }
        }
        if (sub[i] > sublen) sublen = sub[i];
    }
    i = sublen - 1;
    j = length - 1;
    while (i >= 0) {
        while (sub[j] <= i || (i < sublen - 1 && seq[j] >= t[i + 1])) j--;
        t[i--] = seq[j--];
    }
    printf("%ld\n-\n", sublen);
    for (i = 0 ; i < sublen ; i++) printf("%ld\n", t[i]);
}

#define SEQBASESIZE        1000
#define SEQFACTOR          1.5

long *readseq(long *length) {
    long size = SEQBASESIZE, len = 0;
    long *seq = (long *)malloc(size*sizeof(long)), e;
    while (scanf("%ld", &e) == 1) {
        if (len >= size) {
            size = SEQFACTOR*(float)size;
            seq = realloc(seq, size*sizeof(long));
        }
        seq[len++] = e;
    }
    *length = len;
    return seq;
}
Gare di Programmazione Algoritmica (a.a. 2010/11)
(Attività Formativa Complementare, 6 CFU)
Docenti: Nicola Galesi – Riccardo Silvestri
NEW !!
La GPA quest'anno è aperta anche agli studenti della triennale. Leggete attentamente le istruzioni e le regole nella sezione "Chi può partecipare" e "Come si viene Valutati".





Cosa è ?  

L’attività intende avvicinare gli studenti alle gare di programmazione algoritmica sullo stile del ACM International Collegiate Contest. Lo studente che partecipa all’attività dovrà implementare e risolvere correttamente  in un tempo fissato un certo numero di problemi presi dalle Gare dell’ ACM servendosi di un server automatico dell’Università di Valladolid (ONLINE JUDGE— dettagli su questo seguiranno in questa  pagina prossimamente, ma si puo vedere anche la pagina della precedenti Gare di Programmazione organizzate nel nostro dipartimento).



Come è Organizzata ?

L’attività è suddivisa nelle seguenti fasi (le date potrebbero subire leggere modifiche):
Fase Zero
Iscrizione: da 1 Dicembre 2010 a 13 Marzo 2011 (vedi "Come si Partecipa" per iscriversi)
Prima Fase
  • 14 Marzo: pubblicazione dei primi 10 Problemi da risolvere
  • 30 Aprile: invio di almeno 4 soluzioni corrette
Seconda Fase
  • 1 Maggio pubblicazione di altri 6 problemi
  • 1 Giugno: invio di almeno 2 soluzioni corrette dei 6 problemi
Terza Fase
  • Esame: gara in laboratorio stile ACM Contest
  • Possibile premiazione dei primi 3 classificati (con premi offerti dal Dipartimento: da confermare)




Chi può Partecipare ?

Studenti della Magistrale e da quest'anno la GPA è aperta anche agli studenti della Triennale (si veda sotto gli studenti della Triennale possono sfruttare i crediti della GPA).



Come si viene valutati ?

Da quest' anno le AFC non hanno più un voto associato.
Studenti della Magistrale
Per superare con successo la GPA si deve passare con successo la seconda fase.
Studenti della Triennale
Il percorso di Studi della Triennale non prevede AFC. Nel caso della GPA però il CaD ha approvato la seguente norma che consente agli studenti della triennale di poter usare, in certi casi, i crediti della GPA:
Gli studenti della triennale che possono scriversi al Percorso di Eccellenza della Triennale, potranno coprire i crediti che tale percorso richiede con superamento della GPA (vale a dire passare con successo almeno la seconda fase)




Perché Partecipare

Migliorare le proprie capacità di Problem Solving, avvicinarsi al mondo delle gare di programmazione. Il Dipartimento di Informatica (Proff Galesi e Silvestri) attraverso la GPA intende selezionare una o più squadre di studenti da portare alla ACM-ICPC Collegiate Programming Contest nei prossimi anni.



Come si Partecipa ?

È importante confermare al propria partecipazione alla Attività (GPA) mandando una email a domande.studenti [AT] gmail.com con
SUBJECT: GPA
    CORPO della email
        NOME:
        COGNOME:
        MATRICOLA:
        DATA DI NASCITA: