Submission #1272845

#TimeUsernameProblemLanguageResultExecution timeMemory
1272845TaxiradioSum Zero (RMI20_sumzero)C++20
0 / 100
8 ms828 KiB
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; vector<int> a ={0}; vector<int> c ={0}; for(int i = 0; i < n; i++){ int b; cin >> b; a.push_back(b); c.push_back(c.back() + b); } vector<int> dp(n+2 , n+1); map<int , int> e; for(int i = n; i > 0; i--){ e[c[i]] = i; dp[i] = dp[i+1]; if(e[c[i-1]] != 0){ dp[i] = min(dp[i] , e[c[i-1]]+1); } } vector<int> v(n+2); vector<array<int , 20>> bl(n+2); for(int i = 0; i < 20; i++)bl.back()[i] = n+1; for(int i = n; i > 0; i--){ bl[i][0] = dp[i]; for(int j = 1; j < 20; j++){ bl[i][j] = bl[bl[i][j-1]][j-1]; } v[i] = v[dp[i]]+1; } int q; cin >> q; while(q--){ int l , r; cin >> l >> r; int w = l; for(int i = 19; i >= 0; i--){ if(bl[w][i]-1 <= r)w = bl[w][i]; } cout << v[l]-v[w] << "\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...