Pagini recente » Diferente pentru problema/maxflow intre reviziile 25 si 24 | Atasamentele paginii Password2 | Monitorul de evaluare | Atasamentele paginii deminare | Diferente pentru problema/kthvalue intre reviziile 15 si 3
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 sortarii 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 sortari 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 $v$ reprezentand valoarea ce va fi adaugata.
* 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 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
1 7
2 7
1 8
2 8
5 1 3 1
3
2 6
2 7
5 2 3 2
| 1
7
8
|
h3. Explicaţie
Sirul va arata asa in urma transformarilor [] -> [1] -> [7 1] -> [7 1 7] -> [1 7] -> [1 7 6]
Sirul va arata asa in urma transformarilor [] -> [1] -> [8 1] -> [8 1 8] -> [1 8] -> [1 8 7]
== include(page="template/taskfooter" task_id="kthvalue") ==
Nu exista diferente intre securitate.
Topicul de forum nu a fost schimbat.