Pagini recente » Cod sursa (job #2089071) | Cod sursa (job #438259) | Cod sursa (job #1335333) | Cod sursa (job #2178708) | Cod sursa (job #1728293)
#include <iostream>
#include <fstream>
using namespace std;
#define NMAX 250000
#define MMAX 300000
//#define _DEBUG
int N, M, PMax = 0;
int Q[MMAX];
int P[MMAX];
int stramosi[NMAX][NMAX+1];
int main(int argc, const char * argv[]) {
int i, j;
fstream fin("stramosi.in", fstream::in);
fin >> N >> M;
for (i = 1; i <= N; i++) {
fin >> stramosi[i][1];
}
for (i = 0; i < M; i++) {
fin >> Q[i] >> P[i];
if (P[i] > PMax)
PMax = P[i];
}
PMax = (PMax + N - 1) / N;
if (PMax > 10)
PMax = 10;
for (j = 2; j <= PMax; j++) {
for (i = 1; i <= N; i++) {
int s = stramosi[i][j-1];
if (s != 0)
s = stramosi[s][1];
stramosi[i][j] = s != 0 ? stramosi[s][1] : 0;
}
}
for (i = 0; i < M; i++) {
int p = P[i];
int q = Q[i];
while (p > PMax) {
q = stramosi[q][PMax];
p -= PMax;
}
stramosi[Q[i]][P[i]] = stramosi[q][p];
}
fin.close();
#ifdef _DEBUG
for (int i = 0; i < M; i++)
cout << stramosi[Q[i]][P[i]] << "\n";
#else
fstream fout("stramosi.out", fstream::out);
for (int i = 0; i < M; i++)
fout << stramosi[Q[i]][P[i]] << "\n";
fout.close();
#endif
return 0;
}