Submission #846888

#TimeUsernameProblemLanguageResultExecution timeMemory
846888TahirAliyevSum Zero (RMI20_sumzero)C++17
0 / 100
147 ms2904 KiB
#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;
        cout << l + 1 << ' ' << (*itr).first << ' ' << (*itr).second << '\n';
        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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...