Nu aveti permisiuni pentru a descarca fisierul grader_eval.cpp
Diferente pentru problema/kthvalue intre reviziile #4 si #15
Nu exista diferente intre titluri.
Diferente intre continut:
* Tipul $2$, se adauga la final valoarea $v$ * Tipul $3$, se sterge primul element, iar restul se deplaseaza cu $1$ la stanga, inversa operatiei de tip $1$ * Tipul $4$, se sterge ultimul element, inversa operatiei de tip $2$
* Tipul $5$, vi se dau un $x$, $y$ si un $k$. Trebuie sa spuneti care este al $k$-lea element in ordinea sortari printre elemente aflate pe pozitiile $x$, $x + 1$, $x + 2$, ..., $y$ din sir.
* Tipul $5$, vi se dau un $x$, $y$ si un $k$. Trebuie sa spuneti care este al $k$-lea element in ordinea sortarii printre elemente aflate pe pozitiile $x$, $x + 1$, $x + 2$, ..., $y$ din sir.
h2. Date de intrare Fişierul de intrare $kthvalue.in$ va contine pe prima linia un numar natural $M$, reprezentand numarul de operatii pe care trebuie sa le sustineti. Urmatoarele $M$ linii vor descrie fiecare operatie in parte. Astfel primul numar de pe fiecare linie va reprezenta tipul operatiei (1 2 3 4 sau 5).
* Pentru operatiile de tip 1 pe acelasi rand se va mai afla un numar $x$ reprezentand valoarea ce va fi adaugata.
* Pentru operatiile de tip 1 pe acelasi rand se va mai afla un numar $v$ reprezentand valoarea ce va fi adaugata.
* Pentru operatiile de tip 5 pe acelasi rand se vor mai afla $3$ numere $x$, $y$ si $k$ cu descrierile de mai sus.
Pentru a parsa fisierul puteti folosi urmatorul cod in C++ ==code(cpp) | #include <fstream> #include <memory> using namespace std; class Reader { public: Reader(const string& filename): m_stream(filename), m_pos(kBufferSize - 1), m_buffer(new char[kBufferSize]) { next(); } Reader& operator>>(int& value) { value = 0; while (current() < '0' || current() > '9') next(); while (current() >= '0' && current() <= '9') { value = value * 10 + current() - '0'; next(); } return *this; } private: const int kBufferSize = 32768; char current() { return m_buffer[m_pos]; } void next() { if (!(++m_pos != kBufferSize)) { m_stream.read(m_buffer.get(), kBufferSize); m_pos = 0; } } ifstream m_stream; int m_pos; unique_ptr<char[]> m_buffer; }; Reader fin("kthvalue.in"); int x; fin >> x; ==
h2. Date de ieşire În fişierul de ieşire $kthvalue.out$ trebuie sa se afle atatea linii cate operatii de tip 5 sunt. Pentru fiecare trebuie sa afisati numarul corespunzator.
* $1 ≤ x ≤ y ≤ numarul de elemente din sir la momentul respectiv$ * $1 ≤ v ≤ M$ * $Nu vor fi operatii de tip 3 sau 4 cand sirul este vid$
* $Vi se recomanda sa parsati fisierul de intrare..$
h2. Exemplu table(example). |_. kthvalue.in |_. kthvalue.out | | 7 1 1
1828
1 7 2 7
5 1 3 1 3
27
2 6
5 2 3 2 | 1
8
7
| h3. Explicaţie
Sirul va arata asa in urma transformarilor [] -> [1] -> [81] -> [818] -> [18] -> [187]
Sirul va arata asa in urma transformarilor [] -> [1] -> [7 1] -> [7 1 7] -> [1 7] -> [1 7 6]
== include(page="template/taskfooter" task_id="kthvalue") ==