Pagini recente » Cod sursa (job #2365828) | Cod sursa (job #1951875) | Cod sursa (job #1583165) | Cod sursa (job #1182000) | Cod sursa (job #1665284)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
const int Nmax = 250005;
int n, m, LCA[20][Nmax], log2[Nmax];
void Precalculate()
{
for(int i = 2; i <= n; i++) log2[i] = log2[i/2]+1;
for(int i = 1; (1<<i) <= n; i++)
{
for(int j = 1; j <= n; j++)
{
LCA[i][j] = LCA[i-1][LCA[i-1][j]];
}
}
}
int main()
{
f>>n>>m;
for(int i = 1; i <= n; i++)
{
f>>LCA[0][i];
}
Precalculate();
int p, q;
while(m--)
{
f>>q>>p;
while(p)
{
int k = log2[p];
q = LCA[k][q];
p = p - (1<<k);
}
g<<q<<'\n';
}
return 0;
}