#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".
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).
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)
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).
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)
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.
È 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: