Skip to content

Commit 4d9f2cb

Browse files
authored
Create CF954-D2-G.cpp
1 parent 45491c3 commit 4d9f2cb

File tree

1 file changed

+119
-0
lines changed

1 file changed

+119
-0
lines changed

Codeforces/CF954-D2-G.cpp

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
#include <cstring>
2+
#include <map>
3+
#include <deque>
4+
#include <queue>
5+
#include <stack>
6+
#include <sstream>
7+
#include <numeric>
8+
#include <iostream>
9+
#include <iomanip>
10+
#include <cstdio>
11+
#include <cmath>
12+
#include <fstream>
13+
#include <string>
14+
#include <cstdlib>
15+
#include <ctime>
16+
#include <functional>
17+
#include <algorithm>
18+
#include <vector>
19+
#include <set>
20+
#include <complex>
21+
#include <list>
22+
#include <climits>
23+
#include <cctype>
24+
#include <bitset>
25+
using namespace std;
26+
27+
#define PI 3.14159265359
28+
#define all(v) v.begin(),v.end()
29+
#define sortva(v) sort(all(v))
30+
#define sortvd(v) sort(v.rbegin(),v.rend())
31+
#define sortaa(first,n) sort(first,first+n)
32+
#define sortad(first,n) sort(first,first+n),reverse(first,first+n)
33+
#define sfi1(v) scanf("%dist",&v)
34+
#define sfi2(v1,v2) scanf("%dist %dist",&v1,&v2)
35+
#define sfi3(v1,v2,v3) scanf("%dist %dist %dist",&v1,&v2,&v3)
36+
#define sfll1(v) scanf("%I64d",&v);
37+
#define sfll2(v1,v2) scanf("%I64d %I64d",&v1,&v2)
38+
#define sfll3(v1,v2,v3) scanf("%I64d %I64d %I64d",&v1,&v2,&v3)
39+
#define sfstr(v) scanf("%sum", v);
40+
#define sz(v) (int)v.size()
41+
#define ndl puts("")
42+
#define flush fflush(stdout)
43+
#define SS stringstream
44+
typedef long long ll;
45+
typedef unsigned long long ull;
46+
typedef long double ld;
47+
48+
int dx[] = { 0, 0, 1, -1, 1, -1, 1, -1 };
49+
int dy[] = { 1, -1, 0, 0, -1, 1, 1, -1 };
50+
51+
ll gcd(ll first, ll second) { return !second ? first : gcd(second, first % second); }
52+
ll lcm(ll first, ll second) { return (first / gcd(first, second)) * second; }
53+
54+
void PLAY() {
55+
#ifndef ONLINE_JUDGE
56+
freopen("input.txt", "r", stdin);
57+
freopen("output.txt", "w", stdout);
58+
#endif
59+
60+
cout << fixed << setprecision(15);
61+
ios::sync_with_stdio(0);
62+
cin.tie(0);
63+
cout.tie(0);
64+
}
65+
66+
const int MAX = 6e5;
67+
68+
ll n, r, k;
69+
ll archers[MAX], dist[MAX];
70+
71+
bool valid(ll val) {
72+
memset(dist, 0, sizeof dist);
73+
ll tmp = 0, cursum = k;
74+
for (int i = 1; i <= n; ++i) {
75+
ll cur = val - archers[i] - tmp;
76+
if (cur < 0) {
77+
tmp += dist[i];
78+
continue;
79+
}
80+
if (cur > cursum) return false;
81+
cursum -= cur; tmp += cur;
82+
ll idx = min(i + 2 * r, n);
83+
dist[idx] -= cur;
84+
tmp += dist[i];
85+
}
86+
return true;
87+
}
88+
89+
int main() {
90+
PLAY();
91+
92+
cin >> n >> r >> k;
93+
94+
for (int i = 1; i <= n; i++) {
95+
cin >> archers[i];
96+
ll x = max(i - r, 1LL);
97+
ll y = min(i + r, n) + 1;
98+
dist[x] += archers[i];
99+
dist[y] -= archers[i];
100+
}
101+
102+
for (int i = 1; i <= n; i++)
103+
archers[i] = archers[i - 1] + dist[i];
104+
105+
ll lo = *min_element(archers + 1, archers + n + 1);
106+
ll hi = lo + k + 1, res = lo;
107+
108+
while (lo <= hi) {
109+
ll mid = (lo + hi) / 2;
110+
if (valid(mid)) {
111+
res = mid;
112+
lo = mid + 1;
113+
}
114+
else hi = mid - 1;
115+
}
116+
cout << res << endl;
117+
118+
return 0;
119+
}

0 commit comments

Comments
 (0)