1
+ #include < bits/stdc++.h>
2
+ typedef long long ll;
3
+ using namespace std ;
4
+
5
+ const ll INF = 1e18 ;
6
+
7
+ int n, q;
8
+ ll a[200001 ];
9
+ pair<ll, ll> segtree[800001 ];
10
+
11
+ void build (int node = 1 , int l = 1 , int r = n) {
12
+ if (l == r) segtree[node] = {max (0ll , a[l]), a[l]};
13
+ else {
14
+ int mid = (l + r) / 2 ;
15
+ build (node * 2 , l, mid);
16
+ build (node * 2 + 1 , mid + 1 , r);
17
+ segtree[node].first = max (segtree[node * 2 ].first , segtree[node * 2 ].second + segtree[node * 2 + 1 ].first );
18
+ segtree[node].second = segtree[node * 2 ].second + segtree[node * 2 + 1 ].second ;
19
+ }
20
+ }
21
+
22
+ void update (int pos, ll val, int node = 1 , int l = 1 , int r = n) {
23
+ if (l == r) segtree[node] = {max (0ll , val), val};
24
+ else {
25
+ int mid = (l + r) / 2 ;
26
+ if (pos > mid) update (pos, val, node * 2 + 1 , mid + 1 , r);
27
+ else update (pos, val, node * 2 , l, mid);
28
+ segtree[node].first = max (segtree[node * 2 ].first , segtree[node * 2 ].second + segtree[node * 2 + 1 ].first );
29
+ segtree[node].second = segtree[node * 2 ].second + segtree[node * 2 + 1 ].second ;
30
+ }
31
+ }
32
+
33
+ ll query (int x, int y, int node = 1 , int l = 1 , int r = n) {
34
+ if (l > y || r < x) return -INF;
35
+ if (l >= x && r <= y) return segtree[node].first ;
36
+ int mid = (l + r) / 2 ;
37
+ return max (query (x, y, node * 2 , l, mid), segtree[node * 2 ].second + query (x, y, node * 2 + 1 , mid + 1 , r));
38
+ }
39
+
40
+ ll pref (int x, int node = 1 , int l = 1 , int r = n) {
41
+ if (l > x) return 0 ;
42
+ if (r <= x) return segtree[node].second ;
43
+ int mid = (l + r) / 2 ;
44
+ return pref (x, node * 2 , l, mid) + pref (x, node * 2 + 1 , mid + 1 , r);
45
+ }
46
+
47
+ int main () {
48
+ cin.tie (0 )->sync_with_stdio (0 );
49
+ cin >> n >> q;
50
+ for (int i = 1 ; i <= n; i++) cin >> a[i];
51
+ build ();
52
+ while (q--) {
53
+ int t, k, u;
54
+ cin >> t >> k >> u;
55
+ if (t == 1 ) update (k, u);
56
+ else cout << query (k, u) - pref (k - 1 ) << ' \n ' ;
57
+ }
58
+ return 0 ;
59
+ }
0 commit comments