Pagini recente » Cod sursa (job #450180) | Cod sursa (job #2155757) | Cod sursa (job #402583) | Cod sursa (job #2351831) | Cod sursa (job #392556)
Cod sursa(job #392556)
# include <fstream.h>
ifstream f ("stramosi.in");
ofstream g ("stramosi.out");
int v[250005],i,j,n,m,x,y,s[250005],d[250005],q,r[250005],k,zx;
struct nod
{
int info;
nod *urm;
}*a[250005],*p;
struct nod2
{
int info,rez;
nod2 *urm;
}*b[250005],*z;
void df (int x)
{
k=1;
v[k]=x;
z=b[x];
while (z)
{
zx=k-z->info;
if (zx>0)
z->rez=v[zx];
else
z->rez=0;
z=z->urm;
}
while (k)
{
y=v[k];
if (a[y])
{
y=a[y]->info;
a[v[k]]=a[v[k]]->urm;
k++;
v[k]=y;
z=b[y];
while (z)
{
zx=k-z->info;
if (zx>0)
z->rez=v[zx];
else
z->rez=0;
z=z->urm;
}
}
else
k--;
}
}
int main ()
{
f>>n>>m;
for (i=1;i<=n;i++)
{
f>>x;
if (x==0)
{
q++;
r[q]=i;
}
else
{
p=new nod;
p->info=i;
p->urm=a[x];
a[x]=p;
}
}
for (i=1;i<=m;i++)
f>>s[i]>>d[i];
for (i=m;i>=1;i--)
{
z=new nod2;
z->info=d[i];
z->urm=b[s[i]];
b[s[i]]=z;
}
for (j=1;j<=q;j++)
df (r[j]);
for (i=1;i<=m;i++)
{
g<<b[s[i]]->rez<<"\n";
b[s[i]]=b[s[i]]->urm;
}
return 0;
}