Cod sursa(job #485916)

Utilizator slycerdan dragomir slycer Data 19 septembrie 2010 21:12:22
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#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 main() {
	ifstream input("stramosi.in");
	ofstream output("stramosi.out");
       // cout << "asa da";
	int n=0, k=0;
	input >> n >> k;
	int t[(int) log2(n)+3][n + 1];
	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";
	}

	output.close();
	return 0;
}