- Time limit: 3.00 s
- Memory limit: 512 MB
Sinulle on annettu kaksi taulukkoa A ja B, joiden koot ovat n ja m. Olkoon C taulukko, jonka koko on n m, ja jonka arvo kohdassa i + n j (0 \leq i < n, 0 \leq j < m) on A[ i ] + B[ j ]. 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 n, m: taulukkojen A ja B koot.
Toisella rivillä on n kokonaislukua A[ 0 ], \dots, A[ n - 1]: taulukon A arvot.
Kolmannella rivillä on n kokonaislukua B[ 0 ], \dots, B[ m - 1 ]: taulukon B arvot.
Neljännellä rivillä on kaksi lukua q, x_0: 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 n \cdot m, q ja x_0, ja funktio RangeMin(l, r)
korvataan välin [l, r] minimin laskemisella taulukossa C.
Rajat
- 1 \leq n, m \leq 10^5, 1 \leq n m \leq 10^7.
- 1 \leq q \leq 10^7
- 0 \leq A[ i ], B[ j ] \leq 10^9
- 0 \leq x_0 \leq 2^{64} - 1
Esimerkki
Syöte:
3 3 1 2 3 6 3 0 5 0
Tuloste:
1
Selitys: Tässä taulukko C on 7 8 9 4 5 6 1 2 3
. Kyselyt vastaavat välejä [0, 7], [2, 3], [2, 7], [7, 8] ja [6, 8], ja vastaukset niihin ovat 1, 4, 1, 2 ja 1.