제출 #862531

#제출 시각아이디문제언어결과실행 시간메모리
862531blackslexSum Zero (RMI20_sumzero)C++17
61 / 100
216 ms13520 KiB
#include<bits/stdc++.h>

using namespace std;
using ll = long long;

const int N = 4e5;
int n, q, y, cur = -1, par[N], dep[N], lf[N];
ll a, x;
unordered_map<ll, int> mp;

void solve() {
    scanf("%lld %d", &x, &y);
    int ans = 0; x--;
    while (y && par[y] >= x) ans += (lf[y] >= x ? dep[y] - dep[lf[y]] : 1), y = (lf[y] >= x ? lf[y] : par[y]);
    printf("%d\n", ans);
}

int main() {
    scanf("%d", &n); dep[0] = 1;
    for (int i = 1; i <= n; i++) {
        scanf("%lld", &x); a += x;
        if (!a || mp[a]) cur = max(cur, mp[a]);
        mp[a] = i; par[i] = cur; dep[i] = (~cur ? dep[par[i]] + 1 : 1); lf[i] = (~cur && dep[par[i]] - dep[lf[par[i]]] == dep[lf[par[i]]] - dep[lf[lf[par[i]]]] ? lf[lf[par[i]]] : par[i]);
    }
    scanf("%d", &q);
    while (q--) solve();
}

컴파일 시 표준 에러 (stderr) 메시지

sumzero.cpp: In function 'void solve()':
sumzero.cpp:12:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   12 |     scanf("%lld %d", &x, &y);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~
sumzero.cpp: In function 'int main()':
sumzero.cpp:19:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   19 |     scanf("%d", &n); dep[0] = 1;
      |     ~~~~~^~~~~~~~~~
sumzero.cpp:21:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   21 |         scanf("%lld", &x); a += x;
      |         ~~~~~^~~~~~~~~~~~
sumzero.cpp:25:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   25 |     scanf("%d", &q);
      |     ~~~~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...