Revizia anterioară Revizia următoare
Fişierul intrare/ieşire: | tubeyou.in, tubeyou.out | Sursă | Algoritmiada 2019 Runda Maraton |
Autor | Alexandru Petrescu | Adăugată de | |
Timp execuţie pe test | 1.5 sec | Limită de memorie | 262144 kbytes |
Scorul tău | N/A | Dificultate | N/A |
Vezi solutiile trimise | Statistici
Tubeyou
Dupa terminarea vizualizarii unui anumit videoclip x de pe youtube (de durata durata[x] secunde), urmeaza, dupa K secunde, conform recomandarilor, vizualizarea unui videoclip next[x]. Doar ca nu esti pe youtube, ci pe un site care are sistemul de recomandari prost facut.
Cerinta
Se dau Q operatii ce trebuie procesate in ordine:
- update vizionare videoclip: Se da un numar x, indicele unui videoclip pe care il vizitezi. Acum, toate videoclipurile y care il aveau pe x ca recomandare urmatoare (next[y] == x), isi schimba recomandarea in videoclipul recomandat pentru x (next[y] devine next[x]).
- query Marcel iti pune o intrebare pur statistica: Se dau doua numere a si b. Deschizi simultan in doua taburi videoclipurile a si b. Marcel te intreaba in cat timp incepe un videoclip pe unul din taburi care a mai inceput pe celalalt tab. In particular, daca a == b, raspunsul e 0. Intrebarea e statistica iar desfasurarea actiunii e pur ipotetica, adica nu au loc si update-urile corespunzatoare vizualizarii videoclipurilor (sirul next[i] nu se schimba nici pe parcursul, nici in urma query-ului)
Date de intrare
Fişierul de intrare tubeyou.in contine numarul N de videoclipuri, numarul K de secunde intre finalizarea unui videoclip si inceperea urmatorului, si numarul Q de operatii pe prima linie, despartitie prin cate un spatiu. Pe urmatoare line sunt cele N numere, next[i], despartite prin cate un spatiu. Pe urmatoarea linie sunt N numere durata[i] despartite prin cate un spatiu. Pe urmatoarele Q linii, se vor gasi mai multe numere, incepand cu numarul t, care poate fi 0 sau 1. Daca t este 0, urmeaza un singur numar x, si se efectueaza o operatie de update cu parametrul x. Daca, in schimb, t este 1, urmeaza doua numere a si b, si se efectueaza o operatie de query cu parametrii a si b.
Date de ieşire
În fişierul de ieşire tubeyou.out se vor afla mai multe linii. Pe fiecare linie se va afla raspunsul pentru fiecare query, in ordinea in care apar in input. Daca raspunsul la intrebare este infinit, se va afisa numarul 1018, ca in exemplu.
Restricţii
- 1 ≤ next[i], a, b, x ≤ N
- 0 ≤ K ≤ 109
- 1 ≤ durata[i] ≤ 109
- 1 ≤ N, Q ≤ 250.000
- Pentru 10 de puncte, 1 ≤ N, Q ≤ 1.000 - feedback testul 1
- Pentru alte 45 de puncte, 1 ≤ N, Q ≤ 50.000 - feedback testele 3, 7, 10
Exemplu
tubeyou.in | tubeyou.out |
---|---|
32 0 54 3 14 20 23 4 4 4 2 8 8 10 10 12 19 25 25 27 17 24 24 23 15 14 2 22 17 16 17 22 15 31 31 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 1 9 14 1 21 13 1 12 9 1 20 8 1 5 6 1 23 19 1 6 11 1 10 3 1 2 4 1 11 13 1 21 5 1 24 14 1 29 30 1 18 26 1 28 16 1 16 30 1 27 22 1 28 29 1 30 25 1 15 17 1 31 31 1 31 32 1 32 10 0 4 0 24 0 14 0 27 0 31 0 32 1 7 1 1 14 9 1 13 21 1 9 12 1 8 20 1 6 5 1 19 23 1 11 6 1 3 10 1 4 2 1 13 11 1 5 21 1 14 24 1 30 29 1 26 18 1 16 28 1 30 16 1 22 27 1 29 28 1 25 30 1 17 15 1 31 31 1 32 31 1 10 32 | 5 3 5 2 2 1 2 4 3 2 2 2 2 2 1 3 2 2 4 2 3 0 1 1000000000000000000 3 2 4 2 1 1 1 3 2 2 2 1 2 2 1 2 2 2 3 2 2 0 1 1000000000000000000 |