제출 #947864

#제출 시각아이디문제언어결과실행 시간메모리
947864pccSum Zero (RMI20_sumzero)C++17
61 / 100
365 ms48588 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pll pair<ll,ll> #define pii pair<int,int> #define fs first #define sc second #define tlll tuple<ll,ll,ll> const int B = 18; const int mxn = 4e5+10; int N,Q; int ans = 0; map<ll,int> mp; int dp[mxn][B]; int arr[mxn]; void solve(){ int s,e; cin>>s>>e; e++; int ans = 0; for(int i = B-1;i>=0;i--){ if(dp[s][i]<=e){ s = dp[s][i]; ans += 1<<i; } } cout<<ans<<'\n'; return; } int main(){ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>N; for(int i = 1;i<=N;i++)cin>>arr[i]; ll suf = 0; int mn = mxn-1; for(int i = 0;i<B;i++)dp[mxn-1][i] = mxn-1; for(int i = N+1;i>=1;i--){ suf += arr[i]; if(mp.find(suf) != mp.end())mn = min(mn,mp[suf]); mp[suf] = i; dp[i][0] = mn; for(int j = 1;j<B;j++){ dp[i][j] = dp[dp[i][j-1]][j-1]; } } cin>>Q; while(Q--)solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...