제출 #932244

#제출 시각아이디문제언어결과실행 시간메모리
932244tkm_algorithmsSjeckanje (COCI21_sjeckanje)C++17
110 / 110
440 ms28644 KiB
#include <bits/stdc++.h> #define int long long using namespace std; int T[800100][2][2], arr[200100]; void merge(int n, int mid) { for (int i = 0; i < 2; i++) for (int j = 0; j < 2; j++) { T[n][i][j] = -1e18; for (int k = 0; k < 2; k++) for (int l = 0; l < 2; l++) if (l != 1 || k != 1 || arr[mid] * arr[mid + 1] >= 0) T[n][i][j] = max(T[n][i][j], T[n * 2][i][k] + T[n * 2 + 1][l][j]); } } void upd(int p, int l, int r, int pos) { if (l == r) { T[p][1][1] = abs(arr[l]); return; } int mid = l + r >> 1; if (pos <= mid) upd(p * 2, l, mid, pos); else upd(p * 2 + 1, mid + 1, r, pos); merge(p, mid); } signed main() { cin.sync_with_stdio(false); cin.tie(nullptr); int n, q; cin >> n >> q; for (int i = 1; i <= n; i++) cin >> arr[i]; for (int i = n; --i;) arr[i + 1] -= arr[i], upd(1, 1, n, i + 1); arr[1] = 0; for (int i = 0; i < q; i++) { int l, r, x; cin >> l >> r >> x; if (l != 1) arr[l] += x, upd(1, 1, n, l); if (r != n) arr[r + 1] -= x, upd(1, 1, n, r + 1); cout << max(max(T[1][0][0], T[1][0][1]), max(T[1][1][0], T[1][1][1])) << '\n'; } }

컴파일 시 표준 에러 (stderr) 메시지

Main.cpp: In function 'void upd(long long int, long long int, long long int, long long int)':
Main.cpp:23:17: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   23 |     int mid = l + r >> 1;
      |               ~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...