Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define forsn(i, s, n) for(int i=s;i<int(n);i++)
- #define forn(i, n) forsn(i, 0, n)
- #define all(v) v.begin(), v.end()
- #define rall(v) v.rbegin(), v.rend()
- #define NACHO ios::sync_with_stdio(0); cin.tie(NULL);
- typedef long long tint;
- const int INF = 1e6;
- const int MOD = 1e9+7;
- vector<int> adj[220000];
- int succ[200001];
- vector<vector<int>> up (200001, vector<int> (33));
- int query(int u, int k){
- int ret = -1;
- for(int i=30;i>=0;i--){
- if(k&(1<<i)){
- if(ret == -1){
- ret = up[u][i];
- }else{
- ret = up[ret][i];
- }
- }
- }
- return ret;
- }
- int main(){
- NACHO;
- int n, q; cin >> n >> q;
- forn(i, n){
- cin >> succ[i];
- succ[i]--;
- up[i][0] = succ[i];
- }
- forsn(i, 1, 31){
- forn(j, n){
- up[j][i] = up[up[j][i-1]][i-1];
- }
- }
- forn(i, q){
- int u, k; cin >> u >> k;
- u--;
- cout << query(u,k)+1 << "\n";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement