This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
 
using namespace std;
 
#define ll long long int
#define oo 1e9
#define pii pair<int, int>
const int MAX = 4e5 + 5;
int n, q;
int arr[MAX];
int presum[MAX];
int R[MAX];
int dp[MAX];
int main(){
    cin >> n;
    set<pii> s;
    s.insert({0, 0});
    for(int i = 1; i <= n; i++){
        cin >> arr[i];
        presum[i] = presum[i - 1] + arr[i];
        s.insert({presum[i], i});
    }
    for(int l = 0; l < n; l++){
        s.erase(s.find({presum[l], l}));
        auto itr = s.lower_bound({presum[l], 0});
        if(itr == s.end() || (*itr).first != presum[l]) continue;
        R[l + 1] = (*itr).second;
    }
    cin >> q;
    while(q--){
        memset(dp, 0, sizeof(dp));
        int l, r; cin >> l >> r;
        for(int i = r; i >= l; i--){
            if(R[i] > r || R[i] == 0){
                dp[i] = dp[i + 1];
                continue;
            }
            dp[i] = max(dp[i + 1], dp[R[i] + 1] + 1);
        }
        cout << dp[l] << '\n';
    }
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |