119532024-11-21 21:19:08lacitoAzugandcpp17Elfogadva 100/100629ms39564 KiB
// @check-accepted: examples NQsmall Qsmall Bsmall full
#include <bits/stdc++.h>

using namespace std;

const int max_size = 2e5 + 100, INF = 2e9;

int v[max_size], dist[21][max_size];
vector<int> adj[max_size];

void bfs(int bit, int start) {
    queue<int> q;
    q.push(start);
    dist[bit][start] = 1;
    while (!q.empty()) {
        int nod = q.front();
        q.pop();
        for (auto nei : adj[nod]) {
            if (dist[bit][nei] == INF) {
                dist[bit][nei] = dist[bit][nod] + 1;
                q.push(nei);
            }
        }
    }
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int n, q;
    cin >> n >> q;
    for (int i = 1; i <= n; i++) {
        cin >> v[i];
        for (int e = 0; e <= 20; e++) {
            if ((v[i] & (1 << e)) != 0) {
                adj[i].push_back(n + e + 1);
                adj[n + e + 1].push_back(i);
            }
        }
    }
    for (int i = 1; i <= n + 21; i++) {
        for (int j = 0; j <= 20; j++) {
            dist[j][i] = INF;
        }
    }
    for (int j = 0; j <= 20; j++) {
        bfs(j, n + j + 1);
    }
    while (q--) {
        int ans = INF, x, y;
        cin >> x >> y;
        for (int j = 0; j <= 20; j++) {
            if (v[x] & (1 << j)) ans = min(ans, dist[j][y]);
        }
        cout << (ans == INF ? -1 : ans / 2) << '\n';
    }
    cout << '\n';
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva4ms5176 KiB
2Elfogadva6ms5176 KiB
subtask27/7
3Elfogadva7ms5176 KiB
4Elfogadva4ms5176 KiB
5Elfogadva6ms5320 KiB
6Elfogadva6ms5336 KiB
7Elfogadva7ms5176 KiB
8Elfogadva7ms5208 KiB
9Elfogadva4ms5176 KiB
10Elfogadva6ms5176 KiB
11Elfogadva6ms5176 KiB
12Elfogadva6ms5356 KiB
13Elfogadva6ms5176 KiB
subtask323/23
14Elfogadva375ms31412 KiB
15Elfogadva384ms31644 KiB
16Elfogadva298ms31624 KiB
17Elfogadva472ms35300 KiB
18Elfogadva381ms37204 KiB
19Elfogadva501ms38740 KiB
20Elfogadva321ms29852 KiB
21Elfogadva331ms30044 KiB
22Elfogadva314ms30124 KiB
23Elfogadva319ms30008 KiB
24Elfogadva233ms35304 KiB
25Elfogadva261ms35572 KiB
subtask421/21
26Elfogadva217ms30464 KiB
27Elfogadva206ms29604 KiB
28Elfogadva214ms30236 KiB
29Elfogadva199ms30864 KiB
30Elfogadva219ms30964 KiB
31Elfogadva196ms30820 KiB
32Elfogadva204ms29608 KiB
33Elfogadva204ms29856 KiB
34Elfogadva184ms29788 KiB
35Elfogadva184ms29852 KiB
subtask549/49
36Elfogadva6ms5176 KiB
37Elfogadva6ms5180 KiB
38Elfogadva7ms5176 KiB
39Elfogadva4ms5176 KiB
40Elfogadva6ms5320 KiB
41Elfogadva6ms5336 KiB
42Elfogadva7ms5176 KiB
43Elfogadva7ms5208 KiB
44Elfogadva4ms5176 KiB
45Elfogadva6ms5176 KiB
46Elfogadva6ms5176 KiB
47Elfogadva6ms5356 KiB
48Elfogadva6ms5176 KiB
49Elfogadva375ms31412 KiB
50Elfogadva384ms31644 KiB
51Elfogadva298ms31624 KiB
52Elfogadva472ms35300 KiB
53Elfogadva381ms37204 KiB
54Elfogadva501ms38740 KiB
55Elfogadva321ms29852 KiB
56Elfogadva331ms30044 KiB
57Elfogadva314ms30124 KiB
58Elfogadva319ms30008 KiB
59Elfogadva233ms35304 KiB
60Elfogadva261ms35572 KiB
61Elfogadva217ms30464 KiB
62Elfogadva206ms29604 KiB
63Elfogadva214ms30236 KiB
64Elfogadva199ms30864 KiB
65Elfogadva219ms30964 KiB
66Elfogadva196ms30820 KiB
67Elfogadva204ms29608 KiB
68Elfogadva204ms29856 KiB
69Elfogadva184ms29788 KiB
70Elfogadva184ms29852 KiB
71Elfogadva384ms31588 KiB
72Elfogadva532ms32148 KiB
73Elfogadva501ms31532 KiB
74Elfogadva617ms39564 KiB
75Elfogadva606ms37420 KiB
76Elfogadva629ms38484 KiB
77Elfogadva510ms38200 KiB
78Elfogadva428ms30392 KiB
79Elfogadva426ms30372 KiB
80Elfogadva328ms30388 KiB
81Elfogadva433ms30488 KiB
82Elfogadva405ms36960 KiB
83Elfogadva426ms37944 KiB
84Elfogadva425ms37988 KiB