import
java.util.*;
class
Pair<X, Y> {
private
X key;
private
Y value;
public
Pair(X x, Y y)
{
this
.key = x;
this
.value = y;
}
public
X getKey() {
return
key; }
public
Y getValue() {
return
value; }
public
void
setKey(X x) { key = x; }
public
void
setValue(Y y) { value = y; }
}
class
GFG {
static
int
minLoss(
int
n,
int
t,
int
arriv[],
int
units[],
int
prior[])
{
int
ans =
0
;
for
(
int
i =
0
; i < n; i++)
ans += prior[i] * units[i];
ArrayList<Pair<Integer, Integer> > v
=
new
ArrayList<Pair<Integer, Integer> >();
for
(
int
i =
0
; i < n; i++)
v.add(
new
Pair<Integer, Integer>(arriv[i], i));
Collections.sort(
v,
new
Comparator<Pair<Integer, Integer> >() {
public
int
compare(
Pair<Integer, Integer> p1,
Pair<Integer, Integer> p2)
{
return
p1.getKey() - p2.getKey();
}
});
PriorityQueue<Pair<Integer, Integer> > pq
=
new
PriorityQueue<Pair<Integer, Integer> >(
new
Comparator<Pair<Integer, Integer> >() {
public
int
compare(
Pair<Integer, Integer> p1,
Pair<Integer, Integer> p2)
{
if
(p1.getKey() != p2.getKey())
return
p2.getKey()
- p1.getKey();
return
p1.getValue()
- p2.getValue();
}
});
int
ptr =
0
;
for
(
int
i =
1
; i <= t; i++) {
while
(ptr < n && v.get(ptr).getKey() == i) {
pq.add(
new
Pair<Integer, Integer>(
prior[v.get(ptr).getValue()],
units[v.get(ptr).getValue()]));
ptr++;
}
if
(!pq.isEmpty()) {
Pair<Integer, Integer> tmp = pq.peek();
pq.poll();
ans -= tmp.getKey();
tmp.setValue(tmp.getValue() -
1
);
if
(tmp.getValue() >
0
)
pq.add(tmp);
}
}
return
ans;
}
public
static
void
main(String[] args)
{
int
n =
2
, t =
3
;
int
arriv[] = {
1
,
2
};
int
units[] = {
2
,
2
};
int
prior[] = {
100
,
300
};
System.out.println(
minLoss(n, t, arriv, units, prior));
}
}