- Time limit: 3.00 s
- Memory limit: 512 MB
Sinulle on annettu kaksi taulukkoa ja , joiden koot ovat ja . Olkoon taulukko, jonka koko on , ja jonka arvo kohdassa (, ) on . Tehtäväsi on vastata välin minimi -kyselyihin tässä taulukossa. Kyselyt ovat satunnaisia ja enkoodattuja.
Syöte
Ensimmäisellä rivillä on kaksi kokonaislukua , : taulukkojen ja koot.
Toisella rivillä on kokonaislukua : taulukon arvot.
Kolmannella rivillä on kokonaislukua : taulukon arvot.
Neljännellä rivillä on kaksi lukua : kyselyiden määrä ja satunnaisgeneraattorin seed.
Seuraava koodi generoi kyselyt:
uint64_t nextRandom(uint64_t& x) { ull z = (x += 0x9e3779b97f4a7c15); z = (z ^ (z >> 30)) * 0xbf58476d1ce4e5b9; z = (z ^ (z >> 27)) * 0x94d049bb133111eb; return z ^ (z >> 31); } int solve(int nm, int q, uint64_t x) { int ans; for (int qi = 0; qi < q; ++qi) { int l = nextRandom(x) % nm; int r = nextRandom(x) % nm; if (l > r) swap(l, r); ans = rangeMin(l, r); // Implement this x ^= ans; } return ans; }
Jokainen kysely on kutsu funktioon rangeMin.
Tuloste
Palauta funktion solve
palauttama arvo, kun sitä kutsutaan parametreilla ja , ja funktio RangeMin(l, r)
korvataan välin minimin laskemisella taulukossa C.
Rajat
- , .
Esimerkki
Syöte:
3 3 1 2 3 6 3 0 5 0
Tuloste:
1
Selitys: Tässä taulukko on 7 8 9 4 5 6 1 2 3
. Kyselyt vastaavat välejä , , , ja , ja vastaukset niihin ovat ja .