Submission #1225736

#TimeUsernameProblemLanguageResultExecution timeMemory
1225736Muhammad_AneeqSum Zero (RMI20_sumzero)C++20
22 / 100
135 ms22612 KiB
#include <iostream> #include <map> #include <vector> #include <deque> #include <set> #include <algorithm> using namespace std; int const N=1e5+10,LG=19; int nx[N],mn[N],pre[N]; pair<int,int> calc[N][LG]={}; inline void solve() { int n,q; cin>>n; map<long long,int>ind; ind[0]=-1; int a[n]; for (auto& i:a) cin>>i; long long sm=0; for (int i=0;i<n;i++) { nx[i]=-1; sm+=a[i]; if (ind.find(sm)!=ind.end()) { pre[i]=ind[sm]+1; nx[ind[sm]+1]=i; } ind[sm]=i; } for (int i=0;i<=n+1;i++) for (int j=0;j<LG;j++) calc[i][j]={n,n}; mn[n]=n+10; set<pair<int,int>>s; for (int i=n-1;i>=0;i--) { mn[i]=mn[i+1]; if (nx[i]!=-1) { int f=mn[nx[i]+1]; mn[i]=min(mn[i],nx[i]); s.insert({nx[i],i}); } if (s.size()==0) continue; calc[i][0]=*begin(s); } for (int i=n-1;i>=0;i--) { for (int j=1;j<LG;j++) { calc[i][j]=calc[min(n,calc[i][j-1].first+1)][j-1]; } } cin>>q; while (q--) { int l,r; cin>>l>>r; l--;r--; int ans=0; for (int i=LG-1;i>=0;i--) { if (calc[l][i].first<=r) { ans+=(1<<i); l=calc[l][i].first+1; } } cout<<ans<<endl; } } signed main() { ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); int t=1; for (int i=1;i<=t;i++) { solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...