Submission #516994

#TimeUsernameProblemLanguageResultExecution timeMemory
516994StickfishSum Zero (RMI20_sumzero)C++17
61 / 100
311 ms15896 KiB
#include <iostream> #include <map> #include <vector> using namespace std; using ll = long long; const int MAXN = 100000; int a[MAXN]; vector<int> redg[MAXN]; signed main() { int n; cin >> n; for (int i = 0; i < n; ++i) cin >> a[i]; map<ll, int> mp; mp[0] = -1; ll psm = 0; for (int i = 0; i < n; ++i) { psm += a[i]; if (mp.find(psm) == mp.end()) { a[i] = -2; } else { a[i] = mp[psm]; } if (i && a[i - 1] > a[i]) a[i] = a[i - 1]; if (a[i] >= -1) { redg[i].push_back(a[i]); for (int j = 1;; ++j) { int v = redg[i][j - 1]; if (v == -1 || j - 1 >= redg[v].size()) break; redg[i].push_back(redg[v][j - 1]); } } mp[psm] = i; } int q; cin >> q; while (q--) { int l, r; cin >> l >> r; --l; int v = r - 1; int ans = 0; int j = 20; while (true) { if (v < l || j == -1) break; if (j >= redg[v].size() || redg[v][j] + 1 < l) { --j; } else { ans += (1 << j); v = redg[v][j]; } } cout << ans << endl; } }

Compilation message (stderr)

sumzero.cpp: In function 'int main()':
sumzero.cpp:32:38: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   32 |                 if (v == -1 || j - 1 >= redg[v].size())
      |                                ~~~~~~^~~~~~~~~~~~~~~~~
sumzero.cpp:51:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   51 |             if (j >= redg[v].size() || redg[v][j] + 1 < l) {
      |                 ~~^~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...