제출 #1287687

#제출 시각아이디문제언어결과실행 시간메모리
1287687duckindogFish 2 (JOI22_fish2)C++20
25 / 100
4094 ms2396 KiB
#include <bits/stdc++.h> using namespace std; const int N = 100'000 + 10; int n, q; int a[N]; long long pref[N]; int minL[N], maxR[N]; int32_t main() { cin.tie(0)->sync_with_stdio(0); cin >> n; for (int i = 1; i <= n; ++i) cin >> a[i]; for (int i = 1; i <= n; ++i) pref[i] = pref[i - 1] + a[i]; cin >> q; while (q--) { int type; cin >> type; if (type == 1) { int p, x; cin >> p >> x; a[p] = x; for (int i = 1; i <= n; ++i) pref[i] = pref[i - 1] + a[i]; } else { int l, r; cin >> l >> r; int answer = 0; for (int i = l; i <= r; ++i) minL[i] = maxR[i] = i; for (int i = l; i <= r; ++i) { auto& itL = minL[i]; auto& itR = maxR[i]; for (;;) { bool canGo = false; if (itL > l && a[itL - 1] <= pref[itR] - pref[itL - 1]) { int nitL = min(itL, minL[itL - 1]), nitR = max(itR, maxR[itL - 1]); itL = nitL; itR = nitR; canGo = true; } if (itR < r && a[itR + 1] <= pref[itR] - pref[itL - 1]) { int nitL = min(itL, minL[itR + 1]), nitR = max(itR, maxR[itR + 1]); itL = nitL; itR = nitR; canGo = true; } if (!canGo) break; } if (itL == l && itR == r) { answer += 1; } } cout << answer << "\n"; } } }
#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...