제출 #491741

#제출 시각아이디문제언어결과실행 시간메모리
491741Sho10Sum Zero (RMI20_sumzero)C++17
61 / 100
94 ms19180 KiB
#include <bits/stdc++.h> //Andrei Alexandru a.k.a Sho #define ll int #define double long double #pragma GCC optimize("O3") #pragma GCC optimize("Ofast") #define aint(a) (a).begin(), (a).end() #define f first #define s second #define pb push_back #define mp make_pair #define pi pair #define rc(s) return cout<<s,0 #define endl '\n' #define mod 1000000007 #define PI 3.14159265359 #define INF 1000000005 #define LINF 1000000000000000005ll #define CODE_START ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); using namespace std; long long pref[100005]; int nxt[25][100005],n,a[100005]; int32_t main(){ CODE_START; cin>>n; for(ll i=1;i<=n;i++) { cin>>a[i]; pref[i]=pref[i-1]+a[i]; } for(ll j=0;j<20;j++) { for(ll i=0;i<=100004;i++) { nxt[j][i]=-1; } } ll q; cin>>q; map<long long,ll>m; for(ll i=n;i>=0;i--){ if(a[i]==0){ nxt[0][i]=i; } if(m.count(pref[i])){ nxt[0][i+1]=m[pref[i]]; } m[pref[i]]=i; } for(ll i=n-1;i>=1;i--) if(nxt[0][i+1]!=-1){ if(nxt[0][i]==-1){ nxt[0][i]=nxt[0][i+1]; } nxt[0][i]=min(nxt[0][i],nxt[0][i+1]); } for(ll j=1;j<20;j++) { for(ll i=1;i<=n;i++) { if(nxt[j-1][i]!=-1){ nxt[j][i]=nxt[j-1][nxt[j-1][i]+1]; } } } while(q--){ ll l,r; cin>>l>>r; ll pos=l; ll ans=0; for(ll j=19;j>=0;j--) { if(nxt[j][pos]!=-1&&pos<=r&&nxt[j][pos]<=r){ ans+=(1ll<<j); pos=nxt[j][pos]+1; } } cout<<ans<<endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...