Pagini recente » Cod sursa (job #1688734) | Cod sursa (job #1753627) | Cod sursa (job #2942345) | Cod sursa (job #337127) | Cod sursa (job #833691)
Cod sursa(job #833691)
#include <fstream>
#define MAX_SIZE 250000
using namespace std;
int stramosi[18][MAX_SIZE];
int lg[MAX_SIZE];
int main()
{
ifstream input("stramosi.in");
ofstream output("stramosi.out");
int N , M , logN = 1;
input >> N >> M;
while ( (1 << logN) < N)
{
logN ++;
}
logN --;
lg[1] = 0;
for (int i = 2; i <= N;i++)
{
lg[i] = lg[i/2] + 1;
}
for (int i = 1 ;i <= N;i++)
{
input >> stramosi[0][i];
}
for (int i = 1 ; i <= logN;i++)
for (int j = 1 ; j <= N;j++)
{
stramosi[i][j] = stramosi[i-1][stramosi[i-1][j]];
}
for (int i = 0 ; i < M ; i++)
{
int stram , height;
input >> stram >> height;
int answer = stramosi[lg[height]][stram];
height = height - (1 << lg[height]);
while (height != 0)
{
answer = stramosi[lg[height]][answer];
height = height - (1 << lg[height]);
}
output << answer << "\n";
}
input.close();
output.close();
return 0;
}