#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
constexpr int SFT = 100100, INF = 1e9 + 100;
int n, dp[2][200200];
ll L, a[1010], b[1010];
void NO(){
printf("impossible\n");
exit(0);
}
ll getmin(ll v, bool flag = 0){
ll ret = 0;
for (int i=-n;i<=n;i++){
ret += min(v, a[i+n]) * i;
if (flag) b[i+n] = min(v, a[i+n]);
v -= min(v, a[i+n]);
}
return ret;
}
ll getmax(ll v, bool flag = 0){
ll ret = 0;
for (int i=n;i>=-n;i--){
ret += min(v, a[i+n]) * i;
if (flag) b[i+n] = min(v, a[i+n]);
v -= min(v, a[i+n]);
}
return ret;
}
ll getX(ll S, ll mS, ll pS){
if (L < getmin(mS)) NO();
if (L > getmax(pS)) NO();
ll l = mS, r = S;
ll vmn = mS;
while(l<=r){
ll mid = (l+r)>>1;
if (getmin(mid) <= L) vmn = mid, l = mid+1;
else r = mid-1;
}
l = pS, r = S;
ll vmx = pS;
while(l<=r){
ll mid = (l+r)>>1;
if (getmax(mid) >= L) vmx = mid, l = mid+1;
else r = mid-1;
}
ll v = min(vmn, vmx);
if (L < getmin(v) || getmax(v) < L) NO();
return v;
}
void f(int z, int b, int c, int x, int d){
// printf(" %d %d %d %d\n", b, c, x, d);
if (x==0){
for (int i=-b;i<=b;i++){
dp[z][i+SFT] = dp[z^1][i+SFT];
if (d<0) dp[z][i+SFT] -= c;
}
}
else if (x>0){
assert(-b+x < 0);
for (int p=-b;p<-b+x;p++){
list<pair<int, int>> dq;
for (int i=p,j=0 ; i<=b ; i+=x,j++){
while(!dq.empty() && dq.back().first+j*d >= dp[z^1][i+SFT]) dq.pop_back();
while(!dq.empty() && j-dq.front().second > c) dq.pop_front();
dq.emplace_back(dp[z^1][i+SFT]-j*d, j);
dp[z][i+SFT] = dq.front().first + j*d;
}
}
}
else{
x = -x;
assert(b-x > 0);
for (int p=b;p>b-x;p--){
list<pair<int, int>> dq;
for (int i=p,j=0 ; i>=-b ; i-=x,j++){
while(!dq.empty() && dq.back().first+j*d >= dp[z^1][i+SFT]) dq.pop_back();
while(!dq.empty() && dq.front().second-j > c) dq.pop_front();
dq.emplace_back(dp[z^1][i+SFT]-j*d, j);
dp[z][i+SFT] = dq.front().first + j*d;
}
}
}
// for (int i=-5;i<0;i++) printf("%d ", dp[z][i+SFT]);
// printf("| ");
// for (int i=0;i<=5;i++) printf("%d ", dp[z][i+SFT]);
// printf("\n");
}
void solve(ll X){
// printf("X = %lld\n", X);
ll mn = getmin(X), mx = getmax(X);
assert(abs(mn-L) < n || abs(mx-L) < n);
if (abs(mn-L) >= n){
L = -L;
reverse(a, a+n*2+1);
mn = getmin(X), mx = getmax(X);
}
getmin(X, 1);
ll r = n*2 + 2, B = n*n + 1000;
int z = 0;
fill(dp[0]-B+SFT, dp[0]+B+SFT+1, INF);
dp[0][SFT] = 0;
for (int i=-n;i<=n;i++){
if (b[i+n] > 0){
z ^= 1;
fill(dp[z]-B+SFT, dp[z]+B+SFT+1, INF);
f(z, B, min(b[i+n], r), -i, 1);
}
if (b[i+n] < a[i+n]){
z ^= 1;
fill(dp[z]-B+SFT, dp[z]+B+SFT+1, INF);
f(z, B, min(a[i+n]-b[i+n], r), i, -1);
}
}
ll need = L-mn;
if (dp[z][need+SFT]>INF-200200) NO();
printf("%lld\n", X-dp[z][need+SFT]);
}
int main(){
scanf("%d %lld", &n, &L);
ll S = 0, mS = 0, pS = 0;
for (int i=-n;i<=n;i++){
scanf("%lld", a+i+n);
S += a[i+n];
if (i<0) mS += a[i+n];
else if (i>0) pS += a[i+n];
}
solve(getX(S, mS, pS));
}
Compilation message
vault.cpp: In function 'int main()':
vault.cpp:141:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
141 | scanf("%d %lld", &n, &L);
| ~~~~~^~~~~~~~~~~~~~~~~~~
vault.cpp:144:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
144 | scanf("%lld", a+i+n);
| ~~~~~^~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
340 KB |
Output is correct |
2 |
Correct |
1 ms |
340 KB |
Output is correct |
3 |
Correct |
1 ms |
340 KB |
Output is correct |
4 |
Correct |
1 ms |
340 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Correct |
18 ms |
424 KB |
Output is correct |
7 |
Incorrect |
8 ms |
340 KB |
Output isn't correct |
8 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
340 KB |
Output is correct |
2 |
Correct |
1 ms |
340 KB |
Output is correct |
3 |
Correct |
1 ms |
340 KB |
Output is correct |
4 |
Correct |
1 ms |
340 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Correct |
18 ms |
424 KB |
Output is correct |
7 |
Incorrect |
8 ms |
340 KB |
Output isn't correct |
8 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
340 KB |
Output is correct |
2 |
Correct |
3 ms |
340 KB |
Output is correct |
3 |
Correct |
2 ms |
340 KB |
Output is correct |
4 |
Correct |
4 ms |
340 KB |
Output is correct |
5 |
Correct |
4 ms |
340 KB |
Output is correct |
6 |
Correct |
4 ms |
340 KB |
Output is correct |
7 |
Correct |
1 ms |
340 KB |
Output is correct |
8 |
Correct |
1 ms |
340 KB |
Output is correct |
9 |
Correct |
2 ms |
340 KB |
Output is correct |
10 |
Correct |
3 ms |
340 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
340 KB |
Output is correct |
2 |
Correct |
3 ms |
340 KB |
Output is correct |
3 |
Correct |
2 ms |
340 KB |
Output is correct |
4 |
Correct |
4 ms |
340 KB |
Output is correct |
5 |
Correct |
4 ms |
340 KB |
Output is correct |
6 |
Correct |
4 ms |
340 KB |
Output is correct |
7 |
Correct |
1 ms |
340 KB |
Output is correct |
8 |
Correct |
1 ms |
340 KB |
Output is correct |
9 |
Correct |
2 ms |
340 KB |
Output is correct |
10 |
Correct |
3 ms |
340 KB |
Output is correct |
11 |
Correct |
1 ms |
340 KB |
Output is correct |
12 |
Correct |
1 ms |
304 KB |
Output is correct |
13 |
Correct |
1 ms |
340 KB |
Output is correct |
14 |
Correct |
1 ms |
340 KB |
Output is correct |
15 |
Correct |
4 ms |
340 KB |
Output is correct |
16 |
Correct |
2 ms |
340 KB |
Output is correct |
17 |
Correct |
3 ms |
340 KB |
Output is correct |
18 |
Correct |
4 ms |
340 KB |
Output is correct |
19 |
Correct |
4 ms |
340 KB |
Output is correct |
20 |
Correct |
1 ms |
340 KB |
Output is correct |
21 |
Correct |
1 ms |
340 KB |
Output is correct |
22 |
Correct |
3 ms |
340 KB |
Output is correct |
23 |
Correct |
4 ms |
340 KB |
Output is correct |
24 |
Correct |
9 ms |
340 KB |
Output is correct |
25 |
Correct |
3 ms |
340 KB |
Output is correct |
26 |
Correct |
7 ms |
340 KB |
Output is correct |
27 |
Correct |
6 ms |
340 KB |
Output is correct |
28 |
Correct |
6 ms |
376 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
340 KB |
Output is correct |
2 |
Correct |
3 ms |
340 KB |
Output is correct |
3 |
Correct |
2 ms |
340 KB |
Output is correct |
4 |
Correct |
4 ms |
340 KB |
Output is correct |
5 |
Correct |
4 ms |
340 KB |
Output is correct |
6 |
Correct |
4 ms |
340 KB |
Output is correct |
7 |
Correct |
1 ms |
340 KB |
Output is correct |
8 |
Correct |
1 ms |
340 KB |
Output is correct |
9 |
Correct |
2 ms |
340 KB |
Output is correct |
10 |
Correct |
3 ms |
340 KB |
Output is correct |
11 |
Correct |
1 ms |
304 KB |
Output is correct |
12 |
Correct |
4 ms |
340 KB |
Output is correct |
13 |
Correct |
2 ms |
340 KB |
Output is correct |
14 |
Correct |
3 ms |
340 KB |
Output is correct |
15 |
Correct |
4 ms |
340 KB |
Output is correct |
16 |
Correct |
3 ms |
340 KB |
Output is correct |
17 |
Correct |
1 ms |
340 KB |
Output is correct |
18 |
Correct |
1 ms |
304 KB |
Output is correct |
19 |
Correct |
2 ms |
340 KB |
Output is correct |
20 |
Correct |
3 ms |
340 KB |
Output is correct |
21 |
Correct |
1 ms |
352 KB |
Output is correct |
22 |
Correct |
2 ms |
340 KB |
Output is correct |
23 |
Correct |
14 ms |
308 KB |
Output is correct |
24 |
Correct |
6 ms |
340 KB |
Output is correct |
25 |
Correct |
11 ms |
436 KB |
Output is correct |
26 |
Correct |
10 ms |
436 KB |
Output is correct |
27 |
Correct |
9 ms |
340 KB |
Output is correct |
28 |
Correct |
8 ms |
432 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
340 KB |
Output is correct |
2 |
Correct |
1 ms |
340 KB |
Output is correct |
3 |
Correct |
1 ms |
340 KB |
Output is correct |
4 |
Correct |
1 ms |
340 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Correct |
18 ms |
424 KB |
Output is correct |
7 |
Incorrect |
8 ms |
340 KB |
Output isn't correct |
8 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
340 KB |
Output is correct |
2 |
Correct |
3 ms |
340 KB |
Output is correct |
3 |
Correct |
2 ms |
340 KB |
Output is correct |
4 |
Correct |
4 ms |
340 KB |
Output is correct |
5 |
Correct |
4 ms |
340 KB |
Output is correct |
6 |
Correct |
4 ms |
340 KB |
Output is correct |
7 |
Correct |
1 ms |
340 KB |
Output is correct |
8 |
Correct |
1 ms |
340 KB |
Output is correct |
9 |
Correct |
2 ms |
340 KB |
Output is correct |
10 |
Correct |
3 ms |
340 KB |
Output is correct |
11 |
Correct |
1 ms |
304 KB |
Output is correct |
12 |
Correct |
4 ms |
340 KB |
Output is correct |
13 |
Correct |
2 ms |
340 KB |
Output is correct |
14 |
Correct |
3 ms |
340 KB |
Output is correct |
15 |
Correct |
4 ms |
340 KB |
Output is correct |
16 |
Correct |
3 ms |
340 KB |
Output is correct |
17 |
Correct |
1 ms |
340 KB |
Output is correct |
18 |
Correct |
1 ms |
304 KB |
Output is correct |
19 |
Correct |
2 ms |
340 KB |
Output is correct |
20 |
Correct |
3 ms |
340 KB |
Output is correct |
21 |
Correct |
1 ms |
352 KB |
Output is correct |
22 |
Correct |
2 ms |
340 KB |
Output is correct |
23 |
Correct |
14 ms |
308 KB |
Output is correct |
24 |
Correct |
6 ms |
340 KB |
Output is correct |
25 |
Correct |
11 ms |
436 KB |
Output is correct |
26 |
Correct |
10 ms |
436 KB |
Output is correct |
27 |
Correct |
9 ms |
340 KB |
Output is correct |
28 |
Correct |
8 ms |
432 KB |
Output is correct |
29 |
Correct |
1 ms |
280 KB |
Output is correct |
30 |
Correct |
4 ms |
340 KB |
Output is correct |
31 |
Correct |
2 ms |
340 KB |
Output is correct |
32 |
Correct |
4 ms |
340 KB |
Output is correct |
33 |
Correct |
4 ms |
340 KB |
Output is correct |
34 |
Correct |
4 ms |
308 KB |
Output is correct |
35 |
Correct |
1 ms |
340 KB |
Output is correct |
36 |
Correct |
1 ms |
300 KB |
Output is correct |
37 |
Correct |
3 ms |
308 KB |
Output is correct |
38 |
Correct |
3 ms |
340 KB |
Output is correct |
39 |
Correct |
1 ms |
340 KB |
Output is correct |
40 |
Correct |
2 ms |
340 KB |
Output is correct |
41 |
Correct |
11 ms |
432 KB |
Output is correct |
42 |
Correct |
5 ms |
340 KB |
Output is correct |
43 |
Correct |
12 ms |
432 KB |
Output is correct |
44 |
Correct |
10 ms |
304 KB |
Output is correct |
45 |
Correct |
9 ms |
436 KB |
Output is correct |
46 |
Correct |
7 ms |
340 KB |
Output is correct |
47 |
Correct |
2 ms |
436 KB |
Output is correct |
48 |
Correct |
4 ms |
468 KB |
Output is correct |
49 |
Correct |
58 ms |
560 KB |
Output is correct |
50 |
Correct |
26 ms |
484 KB |
Output is correct |
51 |
Correct |
55 ms |
596 KB |
Output is correct |
52 |
Correct |
55 ms |
596 KB |
Output is correct |
53 |
Correct |
52 ms |
596 KB |
Output is correct |
54 |
Correct |
59 ms |
596 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
340 KB |
Output is correct |
2 |
Correct |
1 ms |
340 KB |
Output is correct |
3 |
Correct |
1 ms |
340 KB |
Output is correct |
4 |
Correct |
1 ms |
340 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Correct |
18 ms |
424 KB |
Output is correct |
7 |
Incorrect |
8 ms |
340 KB |
Output isn't correct |
8 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
340 KB |
Output is correct |
2 |
Correct |
3 ms |
340 KB |
Output is correct |
3 |
Correct |
2 ms |
340 KB |
Output is correct |
4 |
Correct |
4 ms |
340 KB |
Output is correct |
5 |
Correct |
4 ms |
340 KB |
Output is correct |
6 |
Correct |
4 ms |
340 KB |
Output is correct |
7 |
Correct |
1 ms |
340 KB |
Output is correct |
8 |
Correct |
1 ms |
340 KB |
Output is correct |
9 |
Correct |
2 ms |
340 KB |
Output is correct |
10 |
Correct |
3 ms |
340 KB |
Output is correct |
11 |
Correct |
1 ms |
304 KB |
Output is correct |
12 |
Correct |
4 ms |
340 KB |
Output is correct |
13 |
Correct |
2 ms |
340 KB |
Output is correct |
14 |
Correct |
3 ms |
340 KB |
Output is correct |
15 |
Correct |
4 ms |
340 KB |
Output is correct |
16 |
Correct |
3 ms |
340 KB |
Output is correct |
17 |
Correct |
1 ms |
340 KB |
Output is correct |
18 |
Correct |
1 ms |
304 KB |
Output is correct |
19 |
Correct |
2 ms |
340 KB |
Output is correct |
20 |
Correct |
3 ms |
340 KB |
Output is correct |
21 |
Correct |
1 ms |
352 KB |
Output is correct |
22 |
Correct |
2 ms |
340 KB |
Output is correct |
23 |
Correct |
14 ms |
308 KB |
Output is correct |
24 |
Correct |
6 ms |
340 KB |
Output is correct |
25 |
Correct |
11 ms |
436 KB |
Output is correct |
26 |
Correct |
10 ms |
436 KB |
Output is correct |
27 |
Correct |
9 ms |
340 KB |
Output is correct |
28 |
Correct |
8 ms |
432 KB |
Output is correct |
29 |
Correct |
1 ms |
280 KB |
Output is correct |
30 |
Correct |
4 ms |
340 KB |
Output is correct |
31 |
Correct |
2 ms |
340 KB |
Output is correct |
32 |
Correct |
4 ms |
340 KB |
Output is correct |
33 |
Correct |
4 ms |
340 KB |
Output is correct |
34 |
Correct |
4 ms |
308 KB |
Output is correct |
35 |
Correct |
1 ms |
340 KB |
Output is correct |
36 |
Correct |
1 ms |
300 KB |
Output is correct |
37 |
Correct |
3 ms |
308 KB |
Output is correct |
38 |
Correct |
3 ms |
340 KB |
Output is correct |
39 |
Correct |
1 ms |
340 KB |
Output is correct |
40 |
Correct |
2 ms |
340 KB |
Output is correct |
41 |
Correct |
11 ms |
432 KB |
Output is correct |
42 |
Correct |
5 ms |
340 KB |
Output is correct |
43 |
Correct |
12 ms |
432 KB |
Output is correct |
44 |
Correct |
10 ms |
304 KB |
Output is correct |
45 |
Correct |
9 ms |
436 KB |
Output is correct |
46 |
Correct |
7 ms |
340 KB |
Output is correct |
47 |
Correct |
2 ms |
436 KB |
Output is correct |
48 |
Correct |
4 ms |
468 KB |
Output is correct |
49 |
Correct |
58 ms |
560 KB |
Output is correct |
50 |
Correct |
26 ms |
484 KB |
Output is correct |
51 |
Correct |
55 ms |
596 KB |
Output is correct |
52 |
Correct |
55 ms |
596 KB |
Output is correct |
53 |
Correct |
52 ms |
596 KB |
Output is correct |
54 |
Correct |
59 ms |
596 KB |
Output is correct |
55 |
Correct |
1 ms |
340 KB |
Output is correct |
56 |
Correct |
3 ms |
308 KB |
Output is correct |
57 |
Correct |
1 ms |
340 KB |
Output is correct |
58 |
Correct |
3 ms |
340 KB |
Output is correct |
59 |
Correct |
4 ms |
340 KB |
Output is correct |
60 |
Correct |
4 ms |
304 KB |
Output is correct |
61 |
Correct |
1 ms |
308 KB |
Output is correct |
62 |
Correct |
1 ms |
312 KB |
Output is correct |
63 |
Correct |
3 ms |
344 KB |
Output is correct |
64 |
Correct |
3 ms |
316 KB |
Output is correct |
65 |
Correct |
1 ms |
340 KB |
Output is correct |
66 |
Correct |
2 ms |
340 KB |
Output is correct |
67 |
Correct |
10 ms |
436 KB |
Output is correct |
68 |
Correct |
5 ms |
344 KB |
Output is correct |
69 |
Correct |
10 ms |
440 KB |
Output is correct |
70 |
Correct |
10 ms |
316 KB |
Output is correct |
71 |
Correct |
10 ms |
340 KB |
Output is correct |
72 |
Correct |
8 ms |
432 KB |
Output is correct |
73 |
Correct |
2 ms |
448 KB |
Output is correct |
74 |
Correct |
4 ms |
444 KB |
Output is correct |
75 |
Correct |
60 ms |
660 KB |
Output is correct |
76 |
Correct |
26 ms |
500 KB |
Output is correct |
77 |
Correct |
58 ms |
652 KB |
Output is correct |
78 |
Correct |
55 ms |
648 KB |
Output is correct |
79 |
Correct |
50 ms |
608 KB |
Output is correct |
80 |
Correct |
49 ms |
608 KB |
Output is correct |
81 |
Correct |
1426 ms |
3168 KB |
Output is correct |
82 |
Correct |
656 ms |
1968 KB |
Output is correct |
83 |
Correct |
1361 ms |
3156 KB |
Output is correct |
84 |
Correct |
1358 ms |
3280 KB |
Output is correct |
85 |
Correct |
14 ms |
1772 KB |
Output is correct |
86 |
Correct |
30 ms |
1748 KB |
Output is correct |
87 |
Correct |
1234 ms |
3156 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
340 KB |
Output is correct |
2 |
Correct |
1 ms |
340 KB |
Output is correct |
3 |
Correct |
1 ms |
340 KB |
Output is correct |
4 |
Correct |
1 ms |
340 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Correct |
18 ms |
424 KB |
Output is correct |
7 |
Incorrect |
8 ms |
340 KB |
Output isn't correct |
8 |
Halted |
0 ms |
0 KB |
- |