Pagini recente » Cod sursa (job #858133) | Istoria paginii runda/simulareoji2015p2/clasament | Cod sursa (job #1260582) | Cod sursa (job #783632) | Cod sursa (job #2191317)
#include <cstdio>
using namespace std;
FILE *f, *g;
int str[20][250002];
//int pMax[250009];
int n, m;
//char s[2000009];
/*
int crChar;
bool isDigit(char c)
{
if(c >= '0' && c <= '9')
return 1;
return 0;
}
int getNr()
{
int nr = 0;
while(isDigit(s[crChar]))
{
nr = nr * 10 + s[crChar] - '0';
crChar ++;
}
crChar ++;
return nr;
}*/
void readFile()
{
f = fopen("stramosi.in", "r");
fscanf(f, "%d%d\n", &n, &m);
// fgets(s, 2000000, f);
int i;
for(i = 1; i <= n; i ++)
fscanf(f, "%d", &str[i][0]);//= getNr();//, printf("%d ", str[i][0]);
// printf("\n");
}
/*
void getPMax()
{
int i;
pMax[1] = 0;
for(i = 2; i <= n; i ++)
{
pMax[i] = pMax[i / 2] + 1;
//printf("%d %d\n", i, pMax[i]);
}
}
*/
void getDinamica()
{
int i, j;
for(j = 1; j <= 18; j ++)
for(i = 1; i <= n; i ++)
{
str[j][i] = str[j - 1] [str[i][j -1]] ;//, printf("%d ", str[j][i]);
// printf("\n");
}
}
void solve()
{
// getPMax();
getDinamica();
}
void answerQuestions()
{
g = fopen("stramosi.out", "w");
int i, stramos, q, p, p2;
for(i = 1; i <= m; i ++)
{
fscanf(f, "%d%d", &q, &p);
p2 = 0;
stramos = q;
while(p > 0)
{
// printf("*\n");
if(p & 1)
stramos = str[p2][stramos];
p2 ++;
p /= 2;
}
fprintf(g, "%d\n", stramos);
}
fclose(f);
fclose(g);
}
int main()
{
readFile();
solve();
answerQuestions();
return 0;
}