java解法,思路比较简单
1、用一个Map来保存每一个下标t和它的值c
2、用ArrayList来存储每一个key
3、用PriorityQueue来保持一个最小的下标
具体操作:
1、添加操作:首先在【t-30,t+30】这个区间判断是否存在key值,如果存在就不添加,不存在就添加
2、获取操作:如果不存在为t的下标key,那么就输出0,否则将Map中key为t的值取出
3、删除操作:首先判断PriorityQueue是否为空,如果为空,那么久输出“skipped”,否则就从中弹出一个最小key,然后从Map, ArrayList中一次删除该key
4、不要问我ArrayList有什么用,我写到现在才发现ArrayList没用 0.0! 0.0!
(最初的打算是在添加元素的时候遍历一次ArrayList,判断是否需要添加元素,后来写的时候直接用Map.containKeys了)
import java.util.ArrayList;
import java.util.HashMap;
import java.util.PriorityQueue;
import java.util.Scanner;
public class Main {
static ArrayList<Integer> keys = new ArrayList<>();
static PriorityQueue<Integer> min = new PriorityQueue<>();
static HashMap<Integer,Integer> hashMap = new HashMap<>();
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int times = sc.nextInt();
sc.nextLine();
while(times -- > 0) {
String s = sc.nextLine();
String[] action = s.split("\\s+");
if (action.length == 1) {
if (action[0].equals("-1")) {
if (!min.isEmpty())
remove(min.peek()); //输出
else
System.out.println("skipped");
} else {
get(Integer.parseInt(action[0])); //输出
}
}
if (action.length == 2) {
add(Integer.valueOf(action[0]),Integer.valueOf(action[1]));
}
}
}
static void add(int t, int c) {
boolean isAdd = true;
for (int i = t - 30; i <= t + 30; i++) {
if (hashMap.containsKey(i)) { //error?
isAdd = false;
break;
}
}
if (isAdd == true) {
hashMap.put(t,c);
keys.add(t);
min.add(t);
}
}
static void remove(int t) {
System.out.println(hashMap.get(t));
hashMap.remove(t);
min.poll();
keys.remove(keys.indexOf(t));
}
static void get(int t) {
if (hashMap.containsKey(t) == false) {
System.out.println(0);
} else {
System.out.println(hashMap.get(t));
}
}
}



京公网安备 11010502036488号