Pagini recente » Cod sursa (job #434712) | Cod sursa (job #934458) | Monitorul de evaluare | Cod sursa (job #3348683) | Cod sursa (job #3350178)
#include <fstream>
#include <vector>
std::ifstream fin("stramosi.in");
std::ofstream fout("stramosi.out");
using namespace std;
vector<vector<int>> RMQ;
vector<int> E;
int N,Q;
int findT(int nod,int len)
{
if(nod == 0 || len == 0)
return nod;
return findT(RMQ[E[len]][nod],len - (1 << E[len]));
}
int main()
{
ios::sync_with_stdio(false);
fin.tie(0);
fin >> N >> Q;
RMQ.resize(18,vector<int>(N+1));
E.resize(N+1,0);
for(int i = 1; i <= N; ++i)
fin >> RMQ[0][i];
for(int i = 2; i <= N; ++i)
E[i] = 1 + E[i/2];
for(int p = 1; p <= 17; ++p)
for(int i = 1; i <= N; ++i)
RMQ[p][i] = RMQ[p-1][RMQ[p-1][i]];
int nod, len;
while(Q--)
{
fin >> nod >> len;
fout << findT(nod,len) << '\n';
}
}