import java.util.*; public class Main { static TreeSet<Integer> ts = new TreeSet<>(); public static void insertValue(int x) { ts.add(x); } public static void eraseValue(int x) { ts.remove(x); } public static boolean xInSet(int x) { // TODO: 实现存在性检查 boolean res = ts.contains(x); return res; } public static int sizeOfSet() { // TODO: 返回集合大小 return ts.size(); } public static int getPre(int x) { // TODO: 实现找前驱 Integer pre = ts.lower(x); return pre != null ? pre : Integer.valueOf(-1); } public static int getBack(int x) { Integer bac = ts.higher(x); return bac != null ? bac : Integer.valueOf(-1); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int q = scanner.nextInt(); while (q-- > 0) { int op = scanner.nextInt(); switch (op) { case 1: insertValue(scanner.nextInt()); break; case 2: eraseValue(scanner.nextInt()); break; case 3: System.out.println(xInSet(scanner.nextInt()) ? "YES" : "NO"); break; case 4: System.out.println(sizeOfSet()); break; case 5: System.out.println(getPre(scanner.nextInt())); break; case 6: System.out.println(getBack(scanner.nextInt())); break; } } scanner.close(); } }描述
您需要动态地维护一个初始为空的集合 MM,并且支持以下操作:
∙ ∙操作 11:向集合 MM 中插入一个数 xx,如果 xx 在集合 MM 中已经存在,则忽略本次操作。
∙ ∙操作 22:从集合 MM 中删除一个数 xx,如果 xx 不在集合 MM 中,则忽略本次操作。
∙ ∙操作 33:查询一个数 xx 是否在集合 MM 中。如果存在,输出 YESYES;否则输出 NONO。
∙ ∙操作 44:查询集合 MM 中元素的个数,即集合 MM 的大小。
∙ ∙操作 55:查询集合 MM 中 xx 的前驱(前驱定义为小于 xx 且最大的数),如果前驱不存在,则输出 −1−1。
∙ ∙操作 66:查询集合 MM 中 xx 的后继(后继定义为大于 xx 且最小的数),如果后继不存在,则输出 −1−1。
输入描述:
第一行输入一个整数 nn(1≦n≦1051≦n≦105),表示操作的个数。
接下来 nn 行,每行表示一次操作。对于操作 1、2、3、5、61、2、3、5、6,输入两个整数 optopt 和 xx(1≦opt≦61≦opt≦6,0≦x≦1060≦x≦106),分别表示操作类型和操作的参数;对于操作 44,输入两个整数 optopt ,表示操作类型。
输出描述:
对于操作类型为 3、4、5、63、4、5、6 的每次操作,按照题意输出对应的查询结果,每个结果占一行。
思路:
1.根据题目要求选择TreeSet类型数据结构;
2.借助TreeSet内部方法完整需求规划;