Pagini recente » Cod sursa (job #1154339) | Cod sursa (job #3128972) | Cod sursa (job #1628405) | Cod sursa (job #1139427) | Cod sursa (job #1776794)
#include <iostream>
#include <fstream>
#include <vector>
#include <math.h>
using namespace std;
vector<vector<int>> ReadElments(int &numberOfElements, int &numberOfQueries, ifstream &in)
{
in>> numberOfElements>> numberOfQueries;
vector<vector<int>> dpMatrix( log2(numberOfElements) + 1 , vector<int>(numberOfElements + 1, 0));
for( int i = 1; i <= numberOfElements; ++i )
{
in>> dpMatrix[0][i];
}
return dpMatrix;
}
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, ifstream &in)
{
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;
ifstream in("stramosi.in");
auto dpMatrix = ReadElments(numberOfElements, numberOfQueries, in);
CompleteDpMatrix(dpMatrix, numberOfElements);
ProcessingQueries(dpMatrix, numberOfElements, numberOfQueries, in);
in.close();
return 0;
}