Submission #1297505

#TimeUsernameProblemLanguageResultExecution timeMemory
1297505MisterReaperSum Zero (RMI20_sumzero)C++20
61 / 100
193 ms28688 KiB
// File B.cpp created on 01.12.2025 at 09:17:41 #include <bits/stdc++.h> using i64 = long long; #ifdef DEBUG #include "/home/ahmetalp/Desktop/Workplace/debug.h" #else #define debug(...) void(23) #endif template<typename T> bool chmax(T& a, T b) { if (a < b) { a = b; return true; } return false; } constexpr int max_N = int(4E5) + 1; int dep[max_N]; int prv[max_N]; std::list<int> adj[max_N]; int tim = 0; void dfs(int v) { prv[v] = tim++; for (auto u : adj[v]) { dfs(u); } } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int N; std::cin >> N; std::map<i64, int> lst; i64 pre = 0; int x, y; lst[0] = 0; prv[0] = -1; dep[0] = 0; for (int i = 1; i <= N; ++i) { std::cin >> x; pre += x; if (lst.count(pre)) { prv[i] = std::max(lst[pre], prv[i - 1]); } else { prv[i] = prv[i - 1]; } dep[i] = prv[i] == -1 ? 0 : dep[prv[i]] + 1; lst[pre] = i; } lst.clear(); for (int i = 0; i <= N; ++i) { if (prv[i] != -1) { adj[prv[i]].emplace_back(i); } prv[i] = -1; } for (int i = 0; i <= N; ++i) { if (prv[i] == -1) { dfs(i); } } int Q; std::cin >> Q; for (int i = 0; i < Q; ++i) { std::cin >> x >> y; --x; int ans = dep[y] - dep[x]; if (prv[x] >= prv[y]) { ans -= 1; } std::cout << ans << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...