1
+ /* *
2
+ * @file 2074.cpp
3
+ * @author Macesuted ([email protected] )
4
+ * @date 2022-05-30
5
+ *
6
+ * @copyright Copyright (c) 2022
7
+ *
8
+ */
9
+
10
+ #include < bits/stdc++.h>
11
+ using namespace std ;
12
+
13
+ bool mem1;
14
+
15
+ #define maxn 100005
16
+ #define maxlgn 20
17
+
18
+ int a[maxn], maxVal[maxlgn][maxn], lg[maxn];
19
+
20
+ int getMax (int l, int r) {
21
+ int x = lg[r - l + 1 ];
22
+ return max (maxVal[x][l], maxVal[x][r - (1 << x) + 1 ]);
23
+ }
24
+
25
+ void solve (void ) {
26
+ int n;
27
+ cin >> n;
28
+ for (int i = 1 ; i <= n; i++) cin >> a[i], maxVal[0 ][i] = a[i];
29
+ for (int i = 1 ; i <= n; i++) {
30
+ lg[i] = lg[i - 1 ];
31
+ if (1 << (lg[i] + 1 ) <= i) lg[i]++;
32
+ }
33
+ for (int i = 1 ; i < maxlgn; i++)
34
+ for (int j = 1 ; j <= n; j++) maxVal[i][j] = max (maxVal[i - 1 ][j], maxVal[i - 1 ][min (n, j + (1 << (i - 1 )))]);
35
+ for (int i = 1 ; i <= n; i++) {
36
+ int ans = 0 ;
37
+ for (int v = 1 ; i - (v - 1 ) * (v - 1 ) - 1 >= 1 ; v++)
38
+ ans = max (ans, getMax (max (1 , i - v * v), i - (v - 1 ) * (v - 1 ) - 1 ) + v);
39
+ for (int v = 1 ; i + (v - 1 ) * (v - 1 ) + 1 <= n; v++)
40
+ ans = max (ans, getMax (i + (v - 1 ) * (v - 1 ) + 1 , min (n, i + v * v)) + v);
41
+ cout << max (0 , ans - a[i]) << endl;
42
+ }
43
+ return ;
44
+ }
45
+
46
+ bool mem2;
47
+
48
+ int main () {
49
+ ios::sync_with_stdio (false );
50
+ #ifdef LOCAL
51
+ cerr << " Memory Cost: " << abs (&mem1 - &mem2) / 1024 . / 1024 . << " MB" << endl;
52
+ #endif
53
+
54
+ int _ = 1 ;
55
+ while (_--) solve ();
56
+
57
+ #ifdef LOCAL
58
+ cerr << " Time Cost: " << clock () * 1000 . / CLOCKS_PER_SEC << " MS" << endl;
59
+ #endif
60
+ return 0 ;
61
+ }
0 commit comments