Напомена: ово је незванична копија задатака. Као таква, не гарантује се да ће овај сајт бити одржаван, и немојте се изненадити ако са њега задаци одједном нестану.

Постоји \(N\) особа и \(M\) соба. Особе могу резервисати собе, али ни у једном тренутку неће две особе имати резервисану исту собу, док свака особа увек има највише једну резервисану собу. На почетку нико нема ништа резервисано. У неким моментима се врши симулирање распоређивања по собама, на основу тренутних резервација, и то функционише на следећи начин:

Дато је и \(Q\) упита, сваки упит је један од следећа два типа:

Описи функција

Потребно је да имплементирате функцију

где је \(N\) број особа, \(M\) број соба, \(Q\) број упита, \(T_i\) типови упита, \(U_i\) особа која резервише собу у упиту типа \(1\), односно особа за коју треба наћи одговор у упиту типа \(2\), \(X_i\) соба коју особа \(U_i\) резервише у упиту типа \(1\), и \(Ans\) низ у који треба уписати одговоре на упите типа \(2\). Сви низови су индексирани од \(1\). Низ \(Ans\) је такође индексиран од \(1\), одговор на \(i\)-ти упит типа \(2\) треба да буде у \(Ans_i\). Ако је \(T_i = 2\), гарантује се да важи \(X_i = 0\).

Пример

Нека је \(N=5\), \(M=8\), \(Q=7\) и нека су дати упити: ~~~ 2 2 1 3 1 2 2 1 2 2 2 2 1 3 5 2 3 ~~~ Тада:

Дакле, за овај пример важи:

Ограничења

Подзадаци

Тест примери су подељени у \(7\) подзадатка: - [5 поена]: \(N,M,Q \leq 500\) - [7 поена]: \(N,M \leq 1.000, Q \leq 20.000\) - [6 поена]: \(N,M \leq 1.000, Q \leq 200.000\) - [11 поена]: \(N,M,Q \leq 300.000, X_i \leq 30\) - [14 поена]: \(N,M \leq 8.000, Q \leq 300.000\) - [23 поена]: \(N,M \leq 100.000, Q \leq 100.000\) - [34 поена]: Нема додатних ограничења

Детаљи имплементације

Потребно је да пошаљете тачно један фајл smestaj.cpp који имплементира поменуту функцију. Осим тражене функције, ваш фајл може садржати и додатне глобалне променљиве, помоћне функције и додатне библиотеке.

Ваша функција мора бити следећег облика:

void Smestaj(int N, int M, int Q, int *T, int *U, int *X, int *Ans);

Вашим програмима је дозвољено да мењају садржај низова/матрица, али не смеју да приступају ван граница датих низова.

Уз задатак, обезбеђен вам је “template” фајл code.cpp које можете користити и мењати по потреби. Такође вам је обезбеђен програм grader.cpp који служи да лакше тестирате кодове. Овај програм учитава са стандардног улаза следеће податке:

Затим овај програм зове вашу функцију и штампа одговре које ваша функција упише у низ Ans.