CSES - RMQn kosto
  • Time limit: 3.00 s
  • Memory limit: 512 MB

Sinulle on annettu kaksi taulukkoa AA ja BB, joiden koot ovat nn ja mm. Olkoon CC taulukko, jonka koko on nmn m, ja jonka arvo kohdassa i+nji + n j (0i<n0 \leq i < n, 0j<m0 \leq j < m) on A[i]+B[j]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 nn, mm: taulukkojen AA ja BB koot.

Toisella rivillä on nn kokonaislukua A[0],,A[n1]A[ 0 ], \dots, A[ n - 1]: taulukon AA arvot.

Kolmannella rivillä on nn kokonaislukua B[0],,B[m1]B[ 0 ], \dots, B[ m - 1 ]: taulukon BB arvot.

Neljännellä rivillä on kaksi lukua q,x0q, 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 nm,qn \cdot m, q ja x0x_0, ja funktio RangeMin(l, r) korvataan välin [l,r][l, r] minimin laskemisella taulukossa C.

Rajat

  • 1n,m1051 \leq n, m \leq 10^5, 1nm1071 \leq n m \leq 10^7.
  • 1q1071 \leq q \leq 10^7
  • 0A[i],B[j]1090 \leq A[ i ], B[ j ] \leq 10^9
  • 0x026410 \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 CC on 7 8 9 4 5 6 1 2 3. Kyselyt vastaavat välejä [0,7][0, 7], [2,3][2, 3], [2,7][2, 7], [7,8][7, 8] ja [6,8][6, 8], ja vastaukset niihin ovat 1,4,1,21, 4, 1, 2 ja 11.