| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1285604 | tarek4241 | Garage (IOI09_garage) | Java | 0 ms | 0 KiB |
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
PriorityQueue<Integer> freeSpaces = new PriorityQueue<>();
int[] rate = new int[N + 1];
int[] weight = new int[M + 1];
Map<Integer, Integer> parkedAt = new HashMap<>();
Queue<Integer> waiting = new LinkedList<>();
for (int i = 1; i <= N; i++) {
rate[i] = Integer.parseInt(br.readLine().trim());
freeSpaces.add(i);
}
for (int i = 1; i <= M; i++) {
weight[i] = Integer.parseInt(br.readLine().trim());
}
long total = 0;
for (int i = 0; i < 2 * M; i++) {
int event = Integer.parseInt(br.readLine().trim());
if (event > 0) {
if (!freeSpaces.isEmpty()) {
int space = freeSpaces.poll();
parkedAt.put(event, space);
total += (long) rate[space] * weight[event];
} else {
waiting.add(event);
}
} else {
int car = -event;
int space = parkedAt.remove(car);
if (!waiting.isEmpty()) {
int nextCar = waiting.poll();
parkedAt.put(nextCar, space);
total += (long) rate[space] * weight[nextCar];
} else {
freeSpaces.add(space);
}
}
}
System.out.println(total);
}
}
