#include <iostream>
#include<bits/stdc++.h>
using namespace std;
struct node
{
int l,r;
}op[100002];
int a[100002];
int cmp(node a,node b)
{
if(a.l!=b.l)
return a.l<b.l;
else return a.r>b.r;
}
int main()
{
int T;
cin>>T;
while(T--)
{
int n,m;
cin>>n>>m;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&op[i].l,&op[i].r);
}
sort(op+1,op+1+m,cmp);
int j = 1;
int book[100005];
//记录要填的每一个数出现的最后位置
memset(book,0,sizeof book);
int p = 1;
for(int i=1;i<=n;i++)
{
while( op[j].r<i)
//当前要填的数跳过了当前区间的右端点
//说明当前区间已经填过了
{
p = 1;
j++;
}
if(j>m||op[j].l>i)
//当前要填的数要填到当前区间的右边
//否则说明要填的位置无限制
{
a[i] = 1;
book[1] = i;
}
else
{
while(book[p]>=op[j].l&&book[p]<=op[j].r)
{
p++;
}
a[i] = p;
book[p] = i;
}
}
int top = 1;
for(int i=1;i<=n;i++)
{
if(top) top=0;
else printf(" ");
printf("%d",a[i]);
}
cout<<endl;
}
return 0;
}
2018HDU多校赛 Distinct Values
猜你喜欢
转载自blog.csdn.net/axuhongbo/article/details/81178060
今日推荐
周排行