Cod sursa(job #2070220)

Utilizator geralt_of_riviajohn nathalis geralt_of_rivia Data 19 noiembrie 2017 12:38:26
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <fstream>
#include<vector>
using namespace std;
ifstream cin ("stramosi.in");
ofstream cout ("stramosi.out");
int n,m,st[250010],vf,l[250100],sol[300100];
vector <int> arb[250010],query[300010],rem[300010];
void read ()
{ int x;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>x;
        arb[x].push_back(i); l[x]++;
    } int y;
    for(int i=1;i<=m;i++)
    {
        cin>>x>>y;
        query[x].push_back(y);
        rem[x].push_back(i);
    }
}
void fix()
{
    int nod=st[vf];
    for(int i=0;i<query[nod].size();i++)
    {
        int t=vf-query[nod][i];
        if(t<0) sol[rem[nod][i]]=0; else
        sol[rem[nod][i]]=st[t];
    }
}
void df ()
{
    while(vf)
    {
        int nod=st[vf];
        if(l[nod]!=0) l[nod]--,st[++vf]=arb[nod][l[nod]];
        else fix(),vf--;
    }
}
void solve ()
{
    for(int i=0;i<l[0];i++)
    {
        vf=1; st[vf]=arb[0][i];
        df();
    }
}
void write ()
{
    for(int i=1;i<=m;i++) cout<<sol[i]<<"\n";
}
int main()
{
    read();
    solve();
    write();
    cin.close();
    cout.close();
    return 0;
}