B - Alyona and mex
Problem description
Alyona‘s mother wants to present an array of n non-negative integers to Alyona. The array should be special.
Alyona is a capricious girl so after she gets the array, she inspects m of its subarrays. Subarray is a set of some subsequent elements of the array. The i-th subarray is described with two integers l
Alyona is going to find mex for each of the chosen subarrays. Among these m mexesthe girl is going to find the smallest. She wants this minimum mex to be as large as possible.
You are to find an array a of n elements so that the minimum mex among those chosen by Alyona subarrays is as large as possible.
The mex of a set S is a minimum possible non-negative integer that is not in S.
Input
The first line contains two integers n and m (1?≤?n,?m?≤?105).
The next m lines contain information about the subarrays chosen by Alyona. The i-th of these lines contains two integers li and ri (1?≤?li?≤?ri?≤?n), that describe the subarray a
Output
In the first line print single integer — the maximum possible minimum mex.
In the second line print n integers — the array a. All the elements in a should be between 0 and 109.
It is guaranteed that there is an optimal answer in which all the elements in a are between 0 and 109.
If there are multiple solutions, print any of them.
Examples
Input5 3Output
1 3
2 5
4 5
2Input
1 0 2 1 0
4 2Output
1 4
2 4
3
5 2 0 1
Note
The first example: the mex of the subarray (1,?3) is equal to 3, the mex of the subarray (2,?5) is equal to 3, the mex of the subarray (4,?5) is equal to 2 as well, thus the minumal mex among the subarrays chosen by Alyona is equal to 2.
解題思路:最小的mex其實就是查看m個區間中哪個區間含有的元素個數最少。這道題最明顯的就是這一點,然後接下來的一行輸出(即a數組中的每個元素)讓我一頭霧水,完全找不到思路QAQ,完全不懂它究竟是怎麽輸出的=_=||,將題目精讀了兩個小時後,終於有了眉目。原來是要我們構造一個(新的數組元素)序列,結合紅色語句可知,這個序列即數組a中的所有元素都可以是不超過最小mex這個最大值,即a[i](1<=i<=n)=i%mex(0~mex-1);這樣才保證mex大於集合S中m個區間各自的mex個元素值,即驗證了題目中的這句話:集合S的mex是不在S中的最小可能的非負整數。還有一點,題目已經說明了如果有多種情況,打印其中任何一個值,因此這種構造序列的方法是正確的。
AC代碼:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main(){ 4 int n,m,l,r,mex=1e5+1; 5 cin>>n>>m; 6 while(m--){ 7 cin>>l>>r; 8 mex=min(mex,r-l+1); 9 } 10 cout<<mex<<endl; 11 for(int i=1;i<=n;++i) 12 cout<<i%mex<<(i==n?"\n":" "); 13 return 0; 14 }
B - Alyona and mex