제출 #875110

#제출 시각아이디문제언어결과실행 시간메모리
875110MinaRagy06Sum Zero (RMI20_sumzero)C++14
100 / 100
773 ms13652 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long const int N = 400'005, LG = 3, B = 7; int nxt[LG][N], a[N], lst[N]; ll prfx = 0, comp[N]; int main() { ios_base::sync_with_stdio(0), cin.tie(0); int n; cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; prfx += a[i]; comp[i] = prfx; } sort(comp, comp + n + 1); memset(lst, -1, sizeof lst); int mn = n + 1; for (int i = n; i >= 0; i--) { int idx = lower_bound(comp, comp + n + 1, prfx) - comp; if (lst[idx] != -1) { mn = min(mn, lst[idx]); } lst[idx] = i; nxt[0][i] = mn; prfx -= a[i]; } nxt[0][n + 1] = n + 1; for (int j = 1; j < LG; j++) { for (int i = 0; i <= n + 1; i++) { nxt[j][i] = nxt[j - 1][i]; for (int k = 1; k < (1 << B); k++) { nxt[j][i] = nxt[j - 1][nxt[j][i]]; } } } int q; cin >> q; while (q--) { int l, r; cin >> l >> r; l--; int ans = 0; for (int j = LG - 1; j >= 0; j--) { while (nxt[j][l] <= r) { ans += 1 << (B * j); l = nxt[j][l]; } } cout << ans << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...