-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path10800_n.cpp
More file actions
30 lines (26 loc) · 804 Bytes
/
10800_n.cpp
File metadata and controls
30 lines (26 loc) · 804 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <cstdio>
int n;
struct data {
int color, size;
};
data arr[200010];
int max_size, sum_size, colors[200010], sizes[2010];
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d %d", &arr[i].color, &arr[i].size);
sum_size += arr[i].size;
if (max_size < arr[i].size) max_size = arr[i].size;
colors[arr[i].color] += arr[i].size;
sizes[arr[i].size]++;
}
sizes[max_size] = max_size * sizes[max_size];
for (int i = max_size - 1; i >= 1; i--) {
sizes[i] = i * sizes[i] + sizes[i + 1];
if (sizes[i] == sum_size) break;
}
for (int i = 1; i <= n; i++) {
printf("%d\n", sum_size - (colors[arr[i].color] * arr[i].size) -
(sizes[arr[i].size]) + arr[i].size);
}
}