// CF template, version 3.0
#include <bits/stdc++.h>
using namespace std;
#define improvePerformance ios_base::sync_with_stdio(false); cin.tie(0)
#define getTest int t; cin >> t
#define eachTest for (int _var=0;_var<t;_var++)
#define get(name) int (name); cin >> (name)
#define out(o) cout << (o)
#define getList(cnt, name) vector<int> (name); for (int _=0;_<(cnt);_++) { get(a); (name).push_back(a); }
#define sortl(name) sort((name).begin(), (name).end())
#define rev(name) reverse((name).begin(), (name).end())
#define forto(name, var) for (int (var) = 0; (var) < (name); (var)++)
#define decision(b) if (b){out("YES");}else{out("NO");}
#define int long long int
template <typename T, typename I>
struct segtree {
int n;
vector<T> tree;
vector<I> initial;
T id;
segtree(int i_n, vector<I> i_initial, T i_id): n(i_n), initial(i_initial), id(i_id) {
tree.resize(4 * n);
}
T conquer(T left, T right) {
// write your conquer function
}
T value(I inp) {
// write your value function
}
void build(int v, int l, int r) {
if (l == r) tree[v] = value(initial[l]);
else {
int middle = (l + r) / 2;
build(2 * v, l, middle);
build(2 * v + 1, middle + 1, r);
tree[v] = conquer(tree[2 * v], tree[2 * v + 1]);
}
}
void upd(int v, int l, int r, int i, I x) {
if (l == r) tree[v] = value(x);
else {
int middle = (l + r) / 2;
if (middle >= i) upd(2 * v, l, middle, i, x);
else upd(2 * v + 1, middle + 1, r, i, x);
tree[v] = conquer(tree[2 * v], tree[2 * v + 1]);
}
}
T query(int v, int l, int r, int ql, int qr) {
if (ql <= l && r <= qr) return tree[v];
else if (r < ql || qr < l) return id;
int middle = (l + r) / 2;
T left = query(2 * v, l, middle, ql, qr);
T right = query(2 * v + 1, middle + 1, r, ql, qr);
return conquer(left, right);
}
};
// vector<int>
vector<int> X;
vector<int> Y;
pair<int, int> eval(int middle) {
vector<array<int, 3>> events;
int pref = 0;
int n = X.size(); // = Y.size()
forto(n, i) {
if (pref >= middle + 1) break;
events.push_back({pref, 0, i});
pref += X[i];
}
int suf = 0;
for (int i = n - 1; i >= 0; i--) {
if (suf >= middle + 1) break;
suf += Y[i];
events.push_back({max(0ll, middle + 1 - suf), 1, i});
}
sortl(events);
int bad = 0;
int nvals = 0;
int neutral = 0;
int x = 0;
int y = 0;
int ptr = 0;
int s = events.size();
int val = 0;
while (ptr < s) {
while (ptr < s && events[ptr][0] == val) {
int typ = events[ptr][1];
int setto = events[ptr][2];
if (typ) y = setto;
else x = setto;
ptr++;
}
if (y < x) bad++;
else if (y == x) nvals++, neutral += (ptr < s? events[ptr][0]: middle + 1) - val;
if (ptr < s) val = events[ptr][0];
}
if (bad) return {-1, -1};
return {nvals, neutral};
}
signed main() {
improvePerformance;
get(n);
forto(n, i) {
get(x);
X.push_back(x);
}
forto(n, i) {
get(y);
Y.push_back(y);
}
int ysum = 0;
forto(n, i) ysum += Y[i];
int xsum = 0;
forto(n, i) {
if (xsum + X[i] >= ysum) {
X[i] = ysum - xsum;
break;
}
xsum += X[i];
}
int l = 0;
int r = ysum;
while (r - l > 1) {
int middle = (l + r) / 2;
auto value = eval(middle);
if (value.first == -1 || value.first > 1) r = middle;
else l = middle;
}
out((l + 1) - (ysum - (l + 1)) - eval(l).second);
}
Compilation message
Main.cpp: In function 'std::pair<long long int, long long int> eval(long long int)':
Main.cpp:15:35: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
15 | #define forto(name, var) for (int (var) = 0; (var) < (name); (var)++)
| ^
Main.cpp:78:5: note: in expansion of macro 'forto'
78 | forto(n, i) {
| ^~~~~
Main.cpp: In function 'int main()':
Main.cpp:10:23: warning: unnecessary parentheses in declaration of 'n' [-Wparentheses]
10 | #define get(name) int (name); cin >> (name)
| ^
Main.cpp:116:5: note: in expansion of macro 'get'
116 | get(n);
| ^~~
Main.cpp:15:35: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
15 | #define forto(name, var) for (int (var) = 0; (var) < (name); (var)++)
| ^
Main.cpp:117:5: note: in expansion of macro 'forto'
117 | forto(n, i) {
| ^~~~~
Main.cpp:10:23: warning: unnecessary parentheses in declaration of 'x' [-Wparentheses]
10 | #define get(name) int (name); cin >> (name)
| ^
Main.cpp:118:9: note: in expansion of macro 'get'
118 | get(x);
| ^~~
Main.cpp:15:35: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
15 | #define forto(name, var) for (int (var) = 0; (var) < (name); (var)++)
| ^
Main.cpp:121:5: note: in expansion of macro 'forto'
121 | forto(n, i) {
| ^~~~~
Main.cpp:10:23: warning: unnecessary parentheses in declaration of 'y' [-Wparentheses]
10 | #define get(name) int (name); cin >> (name)
| ^
Main.cpp:122:9: note: in expansion of macro 'get'
122 | get(y);
| ^~~
Main.cpp:15:35: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
15 | #define forto(name, var) for (int (var) = 0; (var) < (name); (var)++)
| ^
Main.cpp:126:5: note: in expansion of macro 'forto'
126 | forto(n, i) ysum += Y[i];
| ^~~~~
Main.cpp:15:35: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
15 | #define forto(name, var) for (int (var) = 0; (var) < (name); (var)++)
| ^
Main.cpp:128:5: note: in expansion of macro 'forto'
128 | forto(n, i) {
| ^~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
0 ms |
348 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
0 ms |
348 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
1 ms |
348 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
0 ms |
348 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
0 ms |
348 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |