Untitled
Darin
plain_text
2 years ago
2.5 kB
4
Indexable
import java.util.*; class UserSolution { PriorityQueue<Passenger> sections[]; Passenger passengers[]; List<Integer> jobs[]; void init(int N, int M, int J, int mPoint[], int mJobID[]) { sections = new PriorityQueue[N / M]; jobs = new ArrayList[J]; for (int i = 0; i < J; i++) jobs[i] = new ArrayList<>(); passengers = new Passenger[N]; for (int i = 0; i < N; i++) { if (sections[i / M] == null) sections[i / M] = new PriorityQueue<>((a, b) -> a.point == b.point ? a.id - b.id : b.point - a.point); passengers[i] = new Passenger(i, mPoint[i], mJobID[i]); sections[i / M].add(passengers[i]); jobs[mJobID[i]].add(i); } } void destroy() { } int update(int mID, int mPoint) { Passenger p = passengers[mID]; for (int i = 0; i < sections.length; i++) { if (sections[i].remove(p)) { p.point += mPoint; sections[i].add(p); break; } } return p.point; } int updateByJob(int mJobID, int mPoint) { int sum = 0; for (int i = 0; i < sections.length; i++) { for (int id : jobs[mJobID]) { if (sections[i].remove(passengers[id])) { passengers[id].point += mPoint; sum += passengers[id].point; sections[i].add(passengers[id]); } } } return sum; } int move(int mNum) { int sum = 0; List<Passenger> temp[] = new ArrayList[sections.length - 1]; for (int i = 0; i < sections.length - 1; i++) { temp[i] = new ArrayList<>(); for (int j = 0; j < mNum; j++) { Passenger smallest = sections[i].poll(); temp[i].add(smallest); sum += smallest.point; } for (int j = 0; j < mNum; j++) { Passenger largest = sections[i + 1].poll(); sections[i].add(largest); sum += largest.point; } } for (int i = 0; i < temp.length; i++) sections[i + 1].addAll(temp[i]); return sum; } } class Passenger { int id, point, jobID; Passenger(int mID, int mPoint, int mJobID) { id = mID; point = mPoint; jobID = mJobID; } }
Editor is loading...