CSES - RMQn kosto
  • 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$.