Pagini recente » Cod sursa (job #408850) | Istoria paginii utilizator/aalleexxaa | Cod sursa (job #1624853) | Cod sursa (job #1504976) | Cod sursa (job #1776814)
#include <iostream>
#include <fstream>
#include <vector>
#include <math.h>
using namespace std;
ifstream in("stramosi.in");
void ReadElments(vector<vector<int>> &dpMatrix, int numberOfElements)
{
for( int i = 1; i <= numberOfElements; ++i )
{
in>> dpMatrix[0][i];
}
}
void CompleteDpMatrix(vector<vector<int>> &dpMatrix, int numberOfElements)
{
for( int i = 1; i <= log2(numberOfElements); ++i )
{
for( int j = 1; j <= numberOfElements; ++j )
{
dpMatrix[i][j] = dpMatrix[i - 1][dpMatrix[i - 1][j]];
}
}
}
void ProcessingQueries(vector<vector<int>> &dpMatrix, int numberOfElements, int numberOfQueries)
{
int element;
int levelAncestor;
ofstream out("stramosi.out");
while( numberOfQueries-- )
{
in>> element>> levelAncestor;
for( int row = 0; levelAncestor; ++row, levelAncestor >>= 1 )
{
if( levelAncestor % 2 )
{
element = dpMatrix[row][element];
}
}
out<< element<< endl;
}
out.close();
}
int main()
{
int numberOfElements;
int numberOfQueries;
in>> numberOfElements>> numberOfQueries;
vector<vector<int>> dpMatrix( log2(numberOfElements) + 1 , vector<int>(numberOfElements + 1, 0));
ReadElments(dpMatrix, numberOfElements);
CompleteDpMatrix(dpMatrix, numberOfElements);
ProcessingQueries(dpMatrix, numberOfElements, numberOfQueries);
in.close();
return 0;
}