简单贪心~~~
#include <set>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 50010;
struct Node
{
int l, r, id;
Node() {}
Node(int t_l, int t_r, int t_id) : l(t_l), r(t_r), id(t_id) {}
bool operator < (const Node &p) const
{
return l < p.l;
}
};
int cur_num, n;
int num[MAXN];
multiset<Node> mySet;
multiset<Node>::iterator Iter, Iter_2;
int main()
{
//freopen("aa.in", "r", stdin);
//freopen("bb.out", "w", stdout);
int l, r;
while(scanf("%d", &n) != EOF)
{
memset(num, -1, sizeof(num));
for(int i = 0; i < n; ++i)
{
scanf("%d %d", &l, &r);
mySet.insert(Node(l, r, i));
}
Node temp;
cur_num = 0;
while(!mySet.empty())
{
cur_num++;
Iter = mySet.begin();
while(Iter != mySet.end())
{
temp.l = Iter->r;
num[Iter->id] = cur_num;
Iter_2 = mySet.upper_bound(temp);
mySet.erase(Iter);
Iter = Iter_2;
}
}
cout << cur_num << endl;
for(int i = 0; i < n; ++i)
{
cout << num[i] << endl;
}
}
return 0;
}