题意:找的每个子数组中的未出现的最小非负整数,即mex,然后在这些mex中找到最小的那个,并且使那个mex尽可能大。求出一个符合这些条件的数组。
思路:最小mex的值即所有区间里长度的最小值。求数组中每个元素的值即为他们的下标(0到n-1)对mex取余后的值,因为这样每mex个长度的数据,元素值都是从0到mex-1,这样在所有区间中所求的未出现的最小非负整数都是mex,题目上说找出符合题意的数组就行。
#include<bits/stdc++.h>
#define MAX 0x3f3f3f3f
using namespace std;
int num[100005],visit[10005];
int main()
{
int n,m;
cin>>n>>m;
int x,y;
int min1=MAX;
while(m--)
{
cin>>x>>y;
int temp=y-x+1;
min1=min(min1,temp);
}
for(int i=1;i<=n;i++)
{
num[i]=i%min1;
}
cout<<min1<<endl;
for(int i=1;i<=n;i++)
{
cout<<num[i]<<' ';
}
cout<<endl;
return 0;
}