1. 程式人生 > >B - Alyona and mex

B - Alyona and mex

seq res pos ant ++ 說明 ont || title

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

i and ri, and its elements are a[li],?a[li?+?1],?...,?a[ri].

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

[li],?a[li?+?1],?...,?a[ri].

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

Input
5 3
1 3
2 5
4 5
Output
2
1 0 2 1 0
Input
4 2
1 4
2 4
Output
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