SD Challenge 2015 se va desfasura in 2 etape:
Dupa multele aventuri pe care le-a avut jucandu-se cu grafurile bunicilor, Nika fetita noastra neastamparata si-a propus sa infiinteze un Univers de exact M casute numerotate de la 0 la M - 1.
Zis si facut, dar, dupa un timp, in universul static creat de Nika, a aparut haosul sub forma unor biti neastamparati astfel:
Nika repede a luat o foaie si a notat, in ordine, evenimentele petrecute in universul ei precum si niste intrebari ramase pana acum nesolutionate.
Operatiile posibile in univers sunt urmatoarele:
Pentru ca Nika este extenuata de la atata scris si nu mai vrea sa gandeasca, va roaga pe voi sa ii raspundeti la intrebari cat mai repede cu putinta.
Pe prima linie se vor gasi douna numere intregi M si N ( 1 ⇐ N, M ⇐ 10^6 ), dimensiunea universului, respectiv numarul de operatii scrise de Nika pe foaie. Pe urmatoarele N linii se vor gasi cate doi intregi tip si x ( 0 ⇐ tip ⇐ 4, 0 ⇐ x < M ), tipul operatiei si pozitia pe care se face operatia.
La iesire, se vor scrie, pe linii separata, raspunsurile la intrebarile fetitei noastre.
Pentru aceasta, va invitam sa va uitati peste urmatoarele structuri de date: * van Emde Boas trees: * http://en.wikipedia.org/wiki/Van_Emde_Boas_tree * https://courses.csail.mit.edu/6.897/spring03/scribe_notes/L1/lecture1.pdf * Xfast trie (o extensie a structurii de date trie): * http://en.wikipedia.org/wiki/X-fast_trie * http://web.stanford.edu/class/archive/cs/cs166/cs166.1146/lectures/15/Small15.pdf * http://www.borzov.ca/posts/xfast/ * Yfast trie (cine baga structura asta e un zeu si merita statuie in curtea Politehnicii)
Pentru etapa 2, veti avea de implementat functiile din headerul successor.h
aflat in arhiva de mai jos. Aceste functii corespund operatiilor de mai sus si se numesc add
, erase
, find
, next
si findK
. Citirea este facuta in intregime de programul main.cpp
. Voi va trebui sa va scrieti rezolvarea in sursa successor.cpp
care apoi va fi compilata in felul urmator g++ -Wall main.cpp successor.cpp -o successor
.
Aici puteti gasi arhiva cu sursele, respectiv cateva dintre testele folosite pentru evaluare.
Solutiile pentru prima etapa vor trebui trimise pe vmchecker în secțiunea Structuri de Date (CA), la taskul Extra: Universal Successor
La trimiterea unei rezolvari, veti primi timpul obtinut. Va sfatuim sa incercati sa reduceti cat mai mult acest timp de rulare. La sfarsitul fiecarei etape, se va publica clasamentul oficial, obtinut in urma rularii solutiilor trimise de voi pe vmchecker, pe o alta masina, dedicata testului, in care se va asigura egalitatea de sanse intre solutii.
Clasamentul final va lua in calcul performantele obtinute in fiecare etapa, plus o comparatie pe care urmeaza sa o faceti intre solutiile pe care le-ati dezvoltat in fiecare etapa.