const int MAXN = 1100000;
struct Node
{
int v, id, isr;
int operator< (const Node& rhs) const
{
if (v != rhs.v)
return v < rhs.v;
else
return isr > rhs.isr;
}
} ipt[MAXN];
VI ans[MAXN];
int vis[MAXN];
int main()
{
int n, l, r;
while (~RI(n))
{
CLR(vis, 0);
REP(i, MAXN)
ans[i].clear();
REP(i, n)
{
RII(l, r);
int x = i << 1, y = x | 1;
ipt[x].isr = 0;
ipt[x].v = l;
ipt[y].isr = 1;
ipt[y].v = r;
ipt[x].id = ipt[y].id = i + 1;
}
n <<= 1;
sort(ipt, ipt + n);
int val = 0;
REP(i, n)
{
if (ipt[i].isr)
{
if (vis[ipt[i].id] != val)
continue;
val++;
}
else
{
ans[val].push_back(ipt[i].id);
vis[ipt[i].id] = val;
}
}
WI(val);
REP(i, val) REP(j, ans[i].size())
printf("%d%c", ans[i][j], j == (int)ans[i].size() - 1 ? '\n' : ' ');
}
return 0;
}Final Exam Arrangement,布布扣,bubuko.com
原文:http://blog.csdn.net/wty__/article/details/38302287