Pagini recente » Cod sursa (job #2811470) | Cod sursa (job #831694) | Cod sursa (job #2823269) | Cod sursa (job #417864) | Cod sursa (job #485917)
Cod sursa(job #485917)
#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <string>
#include <algorithm>
#include <iterator>
#include <iostream>
#include <cassert>
#include <stdio.h>
#include <cmath>
#include <iostream>
#include <fstream>
using namespace std;
int t[32][250010];
int main() {
ifstream input("stramosi.in");
ofstream output("stramosi.out");
// cout << "asa da";
int n=0, k=0;
input >> n >> k;
t[0][0] = 0;
for (int i = 1; i <= n; i++) {
input >> t[0][i];
}
//cout << log2(n) << endl;
//cout << (int) log2(n) + 1 << endl;
//cout << "go";
for (int i = 1; i <= log2(n) + 1; i++) {
for (int j = 1; j <= n; j++) {
t[i][j] = t[i - 1][t[i - 1][j]];
}
}
int start, stop;
for (int i = 1; i <= k; i++) {
input >> start >> stop;
int pos = start;
int maxValue = 1<<(int)(log2(n)+1);
// cout << maxValue << endl;
if ( stop > maxValue ){
output << "0" << "\n";
continue;
}
for (int j = log2(n)+1; j >= 0; j--) {
int aux = 1 << j;
//cout << aux << endl;
if (stop >= aux) {
stop = stop - aux;
pos = t[j][pos];
if ( pos == 0 ){
break;
}
}
}
output << pos << "\n";
}
cout <<"done";
output.close();
return 0;
}