제출 #1055122

#제출 시각아이디문제언어결과실행 시간메모리
1055122MilosMilutinovicMizuyokan 2 (JOI23_mizuyokan2)C++14
0 / 100
4080 ms5512 KiB
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; vector<int> a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } int q; cin >> q; while (q--) { int x, y, l, r; cin >> x >> y >> l >> r; --x; --r; a[x] = y; vector<long long> pref(n); for (int i = 0; i < n; i++) { pref[i] = (i == 0 ? 0LL : pref[i - 1]) + a[i]; } auto Get = [&](int l, int r) { return pref[r] - (l == 0 ? 0LL : pref[l - 1]); }; auto Solve = [&](int i) { int res = 1 + (i > l ? 1 : 0); while (i < r) { int nxt = -1; for (int j = i + 2; j <= r; j++) { if (a[j] < Get(i + 1, j - 1) && a[i] < Get(i + 1, j - 1) && (j == r || a[j] < Get(j + 1, r))) { nxt = j; break; } } if (nxt != -1) { i = nxt; res += 2; } else { break; } } if (i != r) { assert(a[i] < Get(i + 1, r)); res += 1; } return res; }; int ans = 1; if (l == r || a[l] < Get(l + 1, r)) { ans = max(ans, Solve(l)); } for (int i = l + 1; i <= r; i++) { if (Get(l, i - 1) > a[i] && (i == r || a[i] < Get(i + 1, r))) { ans = max(ans, Solve(i)); } } cout << ans << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...