Submission #1145711

#TimeUsernameProblemLanguageResultExecution timeMemory
11457110pt1mus23Sum Zero (RMI20_sumzero)C++20
100 / 100
248 ms20956 KiB
#pragma GCC optimize("O1") // #pragma GCC optimize("O3,unroll-loops") // #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") #include <bits/stdc++.h> using namespace std; // #define int long long int #define ins insert #define pb push_back #define pii pair<int,int> #define endl '\n' #define all(x) x.begin(),x.end() const int mod = 998244353; const int inf = INT_MAX; const int LG = 19; const int sze = 4e5+23; int dp[sze]; int radium[sze],ans[sze]; void fast(){ int n; cin>>n; vector<int> arr(n); for(int i=1;i<=n;i++){ cin>>arr[i]; } map<int,int> last; last[0]=n+1; int sum=0; for(int i =0;i<n+23;i++){ radium[i]=inf; } for(int i = n;i>=1;i--){ sum+=arr[i]; radium[i]=radium[i+1]; if(last.count(sum)){ radium[i]=min(radium[i],last[sum]); } last[sum]=i; } vector<pii> lst; int q; cin>>q; int m=q; while(q--){ int l,r; cin>>l>>r; lst.pb({l,r}); } // cout<<radium[radium[1]]<<endl; for(int b = 18;b>=0;b--){ for(int i=0;i<=n;i++){ dp[i]=radium[i]; } dp[n+1]=inf; for(int x=0;x<b;x++){ for(int i = 0;i<=n;i++){ if(dp[i]!=inf){ dp[i]=dp[dp[i]]; } else{ dp[i]=inf; } } } // cout<<b<<" "<<dp[1]<<endl; for(int i =0;i<m;i++){ int x = lst[i].first; int y = lst[i].second; if( dp[x]<=y+1 ){ // cout<<x<<" "<<dp[x]<<" "<<y<<endl; lst[i].first=dp[x]; ans[i]+=(1<<b); } } } for(int i =0;i<m;i++){ cout<<ans[i]<<"\n"; } } signed main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int tt =1; // cin>>tt; while(tt--){ fast(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...