Cod sursa(job #2279821)

Utilizator hongnhoNGUYENHONGNHO hongnho Data 10 noiembrie 2018 03:12:56
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb

#include <fstream>
	#include <vector>
	 
	using namespace std;
	 
	ifstream in("stramosi.in");
	ofstream out("stramosi.out");
	 
	int main()
	{
	    int n, T;
	    in >> n >> T;
	 
	    vector<int> log(n + 1);
	 
	    for (int i = 2; i <= n; i++)
	        log[i] = log[i / 2] + 1;
	 
	    vector<vector<int> > dp(log[n] + 1, vector<int>(n + 1));
	 
	    for (int i = 1; i <= n; i++)
	    {
	        int x;
	        in >> x;
	        dp[0][i] = x;
	    }
	 
	    for (int i = 1; i <= log[n]; i++)
	        for (int j = 1; j <= n; j++)
	            dp[i][j] = dp[i - 1][dp[i - 1][j]];
	 
	    while (T--)
	    {
	        int nod, cnt;
	        in >> nod >> cnt;
	 
	        for (int i = log[cnt]; i >= 0; i--)
	            if ((1<<i) & cnt)
	                nod = dp[i][nod];
	 
	        out << nod << '\n';
	    }
	 
	    return 0;
	}