Pagini recente » Cod sursa (job #968640) | Cod sursa (job #375329) | Cod sursa (job #1881216) | Cod sursa (job #1785531) | Cod sursa (job #2879258)
#include <fstream>
#include <cmath>
#include <list>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int n, i, j, m, p, q, anc[21][250001];
int main()
{
fin >> n >> m;
list <int> toUpd;
toUpd.push_back(0);
for (i = 1; i <= n; i++)
{
fin >> anc[0][i];
toUpd.push_back(i);
}
int sz = int(log2(n));
for (j = 1; j <= sz; j++)
{
list<int>::iterator it = toUpd.begin();
for (it++; it != toUpd.end(); it++)
{
anc[j][(*it)] = anc[j-1][anc[j-1][(*it)]];
if (anc[j][(*it)] == 0)
{
list <int> :: iterator it2 = it;
it2--;
toUpd.erase(it);
it = it2;
}
}
}
for (j = 1; j <= m; j++)
{
fin >> q >> p;
int str = q;
while (p > 0)
{
str = anc[int(log2(p))][str];
p -= (1 << int(log2(p)));
}
fout << str << "\n";
}
return 0;
}