CF873E Awards For Contestants

题目描述

translated by @[RebelAlliance](https://www.luogu.org/space/show?uid=92461) ------------ Alexey最近为从Berland来的学生举办了一场编程测试,有 $n$ 个学生参加了测试,第 $i$ 个学生做出了 $a_{i}$ 道题。 现在他想授予一些学生文凭。Alexey可以授予学生三个不同学位的文凭。每个学生要么被授予一个学位的文凭,要么不被授予文凭。令 $cnt_{x}$ 表示被授予学位 $x$ 的文凭的学生数量。其满足一下条件: * 对任意 $x$ $( 1 \leqslant x \leqslant 3 )$,满足 $cnt_{x} > 0$ * 对任意两个学位 $x$ 和 $y$,满足 $cnt_{x} \leqslant 2cnt_{y}$ 当然,有很多种方法分发学位。令 $b_{i}$ 代表第 $i$ 个学生将获得文凭的学位(如果学生不会获得任何文凭则为 $-1$)。同时对任意的 $x$ $( 1 \leqslant x \leqslant 3 )$ 定义 $c_{x}$ 为所有获得学位 $x$ 的文凭的学生中做出最多题的学生做出的题目数量,$d_{x}$ 为所有获得学位 $x$ 的文凭的学生中做出最少题的学生做出的题目数量。Alexey想通过以下规则分发文凭: 1. 如果学生 $i$ 比学生 $j$ 做出了更多题目,那么他被授予的文凭不能比学生 $j$ 的差(不可能学生 $j$ 有文凭而学生 $i$ 没有,同时他们都有文凭但 $b_{j} < b_{i}$ 的情况也不会发生) 2. $d_{1} - c_{2}$ 取能取到的最大值 3. 在所有满足上一条的情况中,$d_{2} - c_{3}$ 取能取到的最大值 4. 在所有满足上一条的情况中,$d_{3} - c_{-1}$ 取能取到的最大值( $c_{-1}$ 为所有没有获得文凭的学生中做出最多题的学生做出的题目数量,如果所有学生都有文凭则为 $0$ ) 帮助Alexey找到一种授予文凭的方法!

输入格式

第一行包括一个整数 $n$ $( 3 \leqslant n \leqslant 3000 )$ 第二行包括 $n$ 个整数 $a_{1}, a_{2},…, a_{n} ( 1 \leqslant a_{i} \leqslant 5000 ) $

输出格式

输出 $n$ 个数,第 $i$ 个数为第 $i$ 个学生被授予的学位(如果没有则为 $-1$ ) 如果有多组解,输出任意一组。保证答案存在。