Submission #635008

#TimeUsernameProblemLanguageResultExecution timeMemory
635008danikoynovSum Zero (RMI20_sumzero)C++14
0 / 100
0 ms212 KiB
#include<bits/stdc++.h>

using namespace std;
typedef long long ll;
const int maxn = 1e5 + 10, maxlog = 19;

int n, dp[maxn][maxlog], q;
ll a[maxn], pref[maxn];
void solve()
{
    cin >> n;
    for (int i = 1; i <= n; i ++)
    {
        cin >> a[i];
        pref[i] = pref[i - 1] + a[i];
    }

    map < int, int > last;
    int cl = n + 1;
    dp[n + 1][0] = n + 1;
    for (int i = n; i >= 0; i --)
    {
        if (last[pref[i]] != 0)
        cl = min(cl, last[pref[i]]);
        dp[i][0] = cl;
        //cout << i << " : " << cl << endl;
        last[pref[i]] = i;
    }

    for (int j = 1; j < maxlog; j ++)
        for (int i = 0; i <= n + 1; i ++)
        dp[i][j] = dp[dp[i][j - 1]][j - 1];
    /**for (int j = 0; j < 4; j ++, cout << endl)
        for (int i = 0; i <= n; i ++)
        cout << dp[i][j] << " ";*/

    cin >> q;
    for (int i = 1; i <= q; i ++)
    {
        int l, r;
        cin >> l >> r;
        l = l - 1;
        int jump = 0;
        for (int bit = maxlog - 1; bit >= 0; bit --)
        {
            //cout << l << " " << jump << endl;
            if (dp[l][bit] <= r)
            {
                //cout << dp[l][bit] << endl;
                jump += (1 << bit);
                l = dp[l][bit];
            }
        }
        cout << jump << endl;
    }
}
int main()
{
    freopen("input.txt", "r", stdin);
    solve();
   return 0;
}
/**

*/

Compilation message (stderr)

sumzero.cpp: In function 'int main()':
sumzero.cpp:59:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   59 |     freopen("input.txt", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...