File tree Expand file tree Collapse file tree 1 file changed +72
-0
lines changed
Expand file tree Collapse file tree 1 file changed +72
-0
lines changed Original file line number Diff line number Diff line change 1+ ```
2+ import java.io.*;
3+ import java.util.*;
4+
5+ public class Main {
6+ private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
7+ private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
8+ private static int[] trees;
9+ private static long[] prefix;
10+ private static int N, Q;
11+
12+ public static void main(String[] args) throws IOException {
13+ init();
14+
15+ while (Q-->0) {
16+ int X = Integer.parseInt(br.readLine());
17+
18+ int pos = binarySearch(X);
19+
20+ int a = pos;
21+ long A = prefix[pos];
22+
23+ int b = N - pos;
24+ long B = prefix[N] - prefix[pos];
25+
26+ long result = ((long) X * a - A) + (B - (long) X * b);
27+ bw.write(result + "\n");
28+ }
29+ bw.flush();
30+ bw.close();
31+ br.close();
32+ }
33+
34+ private static void init() throws IOException {
35+ StringTokenizer st = new StringTokenizer(br.readLine());
36+
37+ N = Integer.parseInt(st.nextToken());
38+ Q = Integer.parseInt(st.nextToken());
39+
40+ trees = new int[N];
41+
42+ st = new StringTokenizer(br.readLine());
43+ for (int i = 0; i < N; i++) {
44+ trees[i] = Integer.parseInt(st.nextToken());
45+ }
46+
47+ Arrays.sort(trees);
48+
49+ prefix = new long[N+1];
50+ for (int i = 0; i < N; i++) {
51+ prefix[i+1] = prefix[i] + trees[i];
52+ }
53+ }
54+
55+ private static int binarySearch(int n) {
56+ int start = 0;
57+ int end = N-1;
58+
59+ while (start <= end) {
60+ int mid = start + (end-start)/2;
61+
62+ if (trees[mid] <= n) {
63+ start = mid + 1;
64+ } else {
65+ end = mid - 1;
66+ }
67+ }
68+
69+ return start;
70+ }
71+ }
72+ ```
You can’t perform that action at this time.
0 commit comments