模拟链表 next[i]表示第i个元素左边(右边亦可)第一个需要改变的元素
亦可用并查集
int f[300010],next[300010];
int min(int u,int v);
int main()
{
int n,m,i,j,x,y,z,t;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=1;i<=n;i++)
{
f[i]=0;
next[i]=i+1;
}
while(m--)
{
scanf("%d%d%d",&x,&y,&z);
for(i=x;i<=y;i=t)
{
if(f[i]==0&&i!=z) f[i]=z;
t=next[i];
if(i<z)
{
next[i]=z;
}
else
{
next[i]=next[y];
}
}
}
for(i=1;i<n;i++)
{
printf("%d ",f[i]);
}
printf("%d\n",f[i]);
}
return 0;
}
int min(int u,int v)
{
if(u<v) return u;
else return v;
}