题意
让你去构造一个长度为n的序列,之后给你一些区间,你构造的序列中这些区间没有重复的值,让你求这个序列的字典序最小
思路
按区间排序贪心。
用优先队列维护区间的mex,双指针扫过去就好。
代码
(%一发蔡队的代码)
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
#define x first
#define y second
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,m;
scanf("%d%d",&n,&m);
vector<PII> a(m);
for(int i = 0 ; i < m ; i++) scanf("%d%d",&a[i].x,&a[i].y);
for(int i = 1 ; i <= n ; i++) a.push_back({i,i});
sort(a.begin(),a.end());
priority_queue<int,vector<int>, greater<int > >q;
for(int i = 1 ; i <= n ; i++) q.push(i);
vector<int> ans(n+1);
int L =1 ,R = 1;
for(auto& t:a)
{
while(L < t.x) q.push(ans[L++]);
while(R <= t.y) ans[R++] = q.top(),q.pop();
}
for(int i = 1 ; i <= n ; i++) printf("%d%c",ans[i]," \n"[i == n]);
}
}