Pagini recente » Cod sursa (job #892209) | Cod sursa (job #1436039) | Cod sursa (job #1133220) | Cod sursa (job #1492904) | Cod sursa (job #973104)
Cod sursa(job #973104)
/// problema cu multe aplicabilitati
#include <fstream>
#include <vector>
#include <bitset>
#include <queue>
#include <algorithm>
#include <utility>
#include <string.h>
#include <math.h>
using namespace std;
ifstream cin("stramosi.in");
ofstream cout("stramosi.out");
const int MAXN = 250005;
const int oo = (1<<31)-1;
const int other = 20;
typedef vector<int> Graph[MAXN];
typedef vector<int> :: iterator It;
int Query[other][MAXN], Lg[MAXN], n, m;
///Query[i][j] = al 2^i-lea stramos al lui j dinamica
int main()
{
cin >> n >> m >> Query[0][1];
for(int i = 2 ; i <= n ; ++ i)
cin >> Query[0][i], Lg[i] = 1 + Lg[i>>1];
for(int i = 1 ; (1<<i) <= n ; ++ i)
for(int j = 1 ; j <= n ; ++ j)
Query[i][j] = Query[i-1][Query[i-1][j]];
for(int i = 1 ; i <= m ; ++ i)
{
int x, y;
for(cin >> x >> y; y ; )
{
x = Query[Lg[y]][x];
y -= 1 << Lg[y];
}
cout << x << "\n";
}
cin.close();
cout.close();
return 0;
}