Cod sursa(job #1189882)

Utilizator mihai995mihai995 mihai995 Data 23 mai 2014 19:52:08
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>
#include <cstring>
using namespace std;

const int N = 1 + 2.5e5, Q = 1 + 3e5;

struct Query{
    int x, nr;
};

int T[N], aux[N];
Query query[Q];

int main(){
    ifstream in("stramosi.in");
    int n, nrQ, LG = 0;

    in >> n >> nrQ;
    for (int i = 1 ; i <= n ; i++)
        in >> T[i];
    for (int i = 1 ; i <= nrQ ; i++){
        in >> query[i].x >> query[i].nr;
        LG = max(LG, query[i].nr);
    }

    in.close();

    LG = 32 - __builtin_clz(LG);
    for (int i = 0 ; i <= LG ; i++){
        for (int j = 1 ; j <= nrQ ; j++)
            if ( query[j].nr & (1 << i) )
                query[j].x = T[ query[j].x ];

        memcpy(aux, T, sizeof(T));
        for (int j = 1 ; j <= n ; j++)
            T[j] = aux[ aux[j] ];
    }

    ofstream out("stramosi.out");

    for (int i = 1 ; i <= nrQ ; i++)
        out << query[i].x << '\n';

    out.close();

    return 0;
}