找到从x往后找到第一个不是-1的点并把它改成xi
将更新过得点直接并入下一个节点的集合中避免多余查找
#include<bits/stdc++.h>
using namespace std;
const long long mod=1048576;
int ne[1551011];
long long a[1510100],id;
int find(int x)
{
if(ne[x]!=x) return ne[x]=find(ne[x]);
else return x;
}
int main()
{
int i,j,n,m,op;
long long x;
scanf("%d",&n);
for(i=0; i<=mod; i++)
{
ne[i]=i;
a[i]=-1;
}
for(i=1; i<=n; i++)
{
scanf("%d%lld",&op,&x);
id=x%mod;
if(op==1)
{
id=find(id);
a[id]=x;
ne[id]=find((id+1)%mod);
}
else
{
printf("%lld\n",a[id]);
}
}
return 0;
}