Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstring>
- #include <vector>
- #include <map>
- #include <set>
- #include <queue>
- #include <stack>
- #include <bitset>
- #include <algorithm>
- #include <iostream>
- #include <iomanip>
- #include <cstdio>
- #include <cmath>
- #include <cstdlib>
- using namespace std;
- typedef long long ll;
- typedef pair<int, int> ii;
- #define pb push_back
- const int maxn = (int) 1e6 + 5;
- const int mod = (int) 1e9 + 7;
- int n, q;
- int l[maxn];
- vector<int> G[maxn];
- int lcm;
- int M[maxn][32];
- int main(){
- ///freopen("test.txt", "r", stdin);
- cin >> n >> q;
- lcm = 1;
- for (int i = 1; i <= n; i ++) {
- cin >> l[i];
- int x = __gcd(l[i], lcm);
- lcm = lcm / x;
- lcm *= l[i];
- for (int j = 1; j <= l[i]; j ++) {
- int x; cin >> x;
- G[i].pb(x);
- }
- }
- for (int i = 0; i < lcm; i ++) {
- for (int j = 1; j <= n; j++) {
- int u = i * n + j;
- int x = G[j][i % l[j]];
- int v = ((i + 1) % lcm) * n + x;
- M[u][0] = v;
- }
- }
- for (int k = 1; k < 32; k ++) {
- for (int i = 1; i <= n * lcm; i ++) {
- M[i][k] = M[M[i][k - 1]][k - 1];
- }
- }
- while (q --){
- ll t; cin >> t; t--;
- ll res = 1;
- for (int i = 31; i >= 0; i--){
- if((1LL << i) <= t) {
- res = M[res][i];
- t -= (1LL << i);
- }
- }
- res = (res % n);
- if(res == 0) res = n;
- cout << res << endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement