Pagini recente » Cod sursa (job #783077) | Cod sursa (job #660326) | Cod sursa (job #2723703) | Cod sursa (job #2457577) | Cod sursa (job #2028378)
#include <fstream>
using namespace std;
ifstream fin ("stramosi.in");
ofstream fout ("stramosi.out");
int v[250001], dp[21][250001], log[250001], n, m;
int cautare (int a, int b)
{
for ( int log2 = log[n]; log2 >= 0; --log2 )
{
if ( 1<<log2 <= b )
{
a = dp[log2][a];
b -= 1<<log2;
}
}
return a;
}
int main()
{
fin>>n>>m;
for ( int i = 1; i <= n; ++i )
fin>>v[i];
for ( int i = 1; i <= n; ++i )
dp[0][i] = v[i];
for ( int i = 1; i <= n; ++i )
log[i] = log[i/2] + 1;
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 (m--)
{
int q, p;
fin>>q>>p;
fout<<cautare(q, p)<<'\n';
}
}