#include <bits/stdc++.h>
#define X first
#define Y second
using namespace std;
typedef long long llint;
const int maxn = 2e5+10;
const int base = 31337;
const int mod = 1e9+7;
const int inf = 0x3f3f3f3f;
const int logo = 20;
const int off = 1 << logo;
const int treesiz = off << 1;
struct node {
llint sol;
llint maxi, mini;
int cnt;
node(llint val) {
maxi = mini = val;
sol = 0, cnt = 1;
}
node() {sol = -1; maxi = mini = 0; cnt = 0;}
void add(llint x) {
maxi += x;
mini += x;
}
void activate(llint val) {
sol = 0;
maxi = mini = val;
cnt = 1;
}
};
int n, m, d;
int a[maxn], b[maxn];
vector< int > v;
node tour[treesiz];
llint prop[treesiz];
map< int, int > cnt;
node merg(node a, node b) {
if (a.sol == -1) return b;
if (b.sol == -1) return a;
node out;
out.sol = max(a.sol, b.sol);
out.sol = max(out.sol, b.maxi - a.mini);
out.mini = min(a.mini, b.mini);
out.maxi = max(a.maxi, b.maxi);
out.cnt = a.cnt + b.cnt;
return out;
}
void send(int x) {
tour[x * 2].add(prop[x]);
tour[x * 2 + 1].add(prop[x]);
prop[x * 2] += prop[x];
prop[x * 2 + 1] += prop[x];
prop[x] = 0;
}
void update(int a, int b, int l, int r, int node, llint val) {
if (l > b || r < a) return;
if (l >= a && r <= b) {
tour[node].add(val);
prop[node] += val;
return;
}
int mid = (l + r) / 2;
send(node);
update(a, b, l, mid, node * 2, val);
update(a, b, mid + 1, r, node * 2 + 1, val);
tour[node] = merg(tour[node * 2], tour[node * 2 + 1]);
}
node query(int a, int b, int l, int r, int node) {
if (l > b || r < a) return ::node();
if (l >= a && r <= b) return tour[node];
int mid = (l + r) / 2;
send(node);
return merg(query(a, b, l, mid, node * 2), query(a, b, mid + 1, r, node * 2 + 1));
}
int main() {
scanf("%d%d%d", &n, &m, &d);
for (int i = 0; i < n; i++)
scanf("%d", a+i);
for (int i = 0; i < m; i++)
scanf("%d", b+i);
sort(a, a + n);
for (int i = 0; i < n; i++) v.push_back(a[i]);
for (int i = 0; i < m; i++) v.push_back(b[i]);
sort(v.begin(), v.end());
for (int i = 0; i < n; i++) {
int ind = lower_bound(v.begin(), v.end(), a[i]) - v.begin();
ind += cnt[a[i]]++;
//printf("adding: %d\n", ind);
tour[off + ind].sol = 0, tour[off + ind].cnt = 1;
update(ind, ind, 0, off - 1, 1, (llint)i * d - a[i]);
}
for (int i = 0; i < m; i++) {
int ind = lower_bound(v.begin(), v.end(), b[i]) - v.begin();
ind += cnt[b[i]]++;
int prev = query(0, ind - 1, 0, off - 1, 1).cnt;
//printf("adding: %d --> %d %lld\n", b[i], prev, (llint)prev * d - b[i]);
llint kol = query(ind, ind, 0, off - 1, 1).maxi;
tour[ind + off].activate(-kol);
update(ind, ind, 0, off - 1, 1, (llint)prev * d - b[i]);
//printf("debug: %lld %lld %lld\n", tour[1].maxi, tour[1].mini, tour[1].sol);
update(ind + 1, off - 1, 0, off - 1, 1, d);
llint out = tour[1].sol;
//printf("debug: %lld %lld %lld\n", tour[1].maxi, tour[1].mini, tour[1].sol);
printf("%lld", out / 2);
if (out % 2 == 1) printf(".5");
printf(" ");
}
return 0;
}
Compilation message
Main.cpp: In function 'int main()':
Main.cpp:93:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
93 | scanf("%d%d%d", &n, &m, &d);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~
Main.cpp:95:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
95 | scanf("%d", a+i);
| ~~~~~^~~~~~~~~~~
Main.cpp:97:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
97 | scanf("%d", b+i);
| ~~~~~^~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
28 ms |
66116 KB |
Output is correct |
2 |
Correct |
27 ms |
66112 KB |
Output is correct |
3 |
Correct |
28 ms |
65972 KB |
Output is correct |
4 |
Correct |
29 ms |
66164 KB |
Output is correct |
5 |
Correct |
27 ms |
66168 KB |
Output is correct |
6 |
Correct |
27 ms |
66140 KB |
Output is correct |
7 |
Correct |
30 ms |
66064 KB |
Output is correct |
8 |
Correct |
27 ms |
66080 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
28 ms |
66116 KB |
Output is correct |
2 |
Correct |
27 ms |
66112 KB |
Output is correct |
3 |
Correct |
28 ms |
65972 KB |
Output is correct |
4 |
Correct |
29 ms |
66164 KB |
Output is correct |
5 |
Correct |
27 ms |
66168 KB |
Output is correct |
6 |
Correct |
27 ms |
66140 KB |
Output is correct |
7 |
Correct |
30 ms |
66064 KB |
Output is correct |
8 |
Correct |
27 ms |
66080 KB |
Output is correct |
9 |
Correct |
216 ms |
81368 KB |
Output is correct |
10 |
Correct |
218 ms |
81668 KB |
Output is correct |
11 |
Correct |
150 ms |
71740 KB |
Output is correct |
12 |
Correct |
226 ms |
81184 KB |
Output is correct |
13 |
Correct |
194 ms |
80848 KB |
Output is correct |
14 |
Correct |
214 ms |
80948 KB |
Output is correct |
15 |
Correct |
217 ms |
80828 KB |
Output is correct |
16 |
Correct |
199 ms |
80328 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
486 ms |
82276 KB |
Output is correct |
2 |
Correct |
478 ms |
84260 KB |
Output is correct |
3 |
Correct |
423 ms |
74692 KB |
Output is correct |
4 |
Correct |
495 ms |
81512 KB |
Output is correct |
5 |
Correct |
495 ms |
83360 KB |
Output is correct |
6 |
Correct |
470 ms |
82368 KB |
Output is correct |
7 |
Correct |
484 ms |
83644 KB |
Output is correct |
8 |
Correct |
491 ms |
82664 KB |
Output is correct |
9 |
Correct |
493 ms |
82028 KB |
Output is correct |
10 |
Correct |
537 ms |
84480 KB |
Output is correct |
11 |
Correct |
507 ms |
82700 KB |
Output is correct |
12 |
Correct |
520 ms |
84052 KB |
Output is correct |
13 |
Correct |
911 ms |
81888 KB |
Output is correct |
14 |
Correct |
492 ms |
84164 KB |
Output is correct |
15 |
Correct |
500 ms |
83764 KB |
Output is correct |
16 |
Correct |
483 ms |
82008 KB |
Output is correct |
17 |
Correct |
475 ms |
83344 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
486 ms |
82276 KB |
Output is correct |
2 |
Correct |
478 ms |
84260 KB |
Output is correct |
3 |
Correct |
423 ms |
74692 KB |
Output is correct |
4 |
Correct |
495 ms |
81512 KB |
Output is correct |
5 |
Correct |
495 ms |
83360 KB |
Output is correct |
6 |
Correct |
470 ms |
82368 KB |
Output is correct |
7 |
Correct |
484 ms |
83644 KB |
Output is correct |
8 |
Correct |
491 ms |
82664 KB |
Output is correct |
9 |
Correct |
493 ms |
82028 KB |
Output is correct |
10 |
Correct |
537 ms |
84480 KB |
Output is correct |
11 |
Correct |
507 ms |
82700 KB |
Output is correct |
12 |
Correct |
520 ms |
84052 KB |
Output is correct |
13 |
Correct |
911 ms |
81888 KB |
Output is correct |
14 |
Correct |
492 ms |
84164 KB |
Output is correct |
15 |
Correct |
500 ms |
83764 KB |
Output is correct |
16 |
Correct |
483 ms |
82008 KB |
Output is correct |
17 |
Correct |
475 ms |
83344 KB |
Output is correct |
18 |
Correct |
676 ms |
83036 KB |
Output is correct |
19 |
Correct |
659 ms |
84128 KB |
Output is correct |
20 |
Correct |
439 ms |
75500 KB |
Output is correct |
21 |
Correct |
522 ms |
82528 KB |
Output is correct |
22 |
Correct |
583 ms |
82972 KB |
Output is correct |
23 |
Correct |
485 ms |
82620 KB |
Output is correct |
24 |
Correct |
686 ms |
83124 KB |
Output is correct |
25 |
Correct |
473 ms |
82696 KB |
Output is correct |
26 |
Correct |
668 ms |
82248 KB |
Output is correct |
27 |
Correct |
675 ms |
84284 KB |
Output is correct |
28 |
Correct |
564 ms |
82860 KB |
Output is correct |
29 |
Correct |
612 ms |
82752 KB |
Output is correct |
30 |
Correct |
511 ms |
81856 KB |
Output is correct |
31 |
Correct |
509 ms |
84140 KB |
Output is correct |
32 |
Correct |
495 ms |
83128 KB |
Output is correct |
33 |
Correct |
676 ms |
80956 KB |
Output is correct |
34 |
Correct |
515 ms |
82500 KB |
Output is correct |