제출 #537891

#제출 시각아이디문제언어결과실행 시간메모리
537891vladislav11Sum Zero (RMI20_sumzero)C++14
61 / 100
353 ms23416 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const int N = int(4e5)+100; int n; ll a[N]; int nxt[N]; int jmp[N]; array<int,3> qer[N]; int main () { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n; a[0] = 0; for ( int i=1; i<=n; i++ ) cin >> a[i]; for ( int i=1; i<=n; i++ ) a[i] += a[i-1]; map<ll,int> pre; for ( int i=0; i<=n+1; i++ ) nxt[i] = n+1; for ( int i=0; i<=n; i++ ) { if ( pre.count( a[i] ) ) nxt[ pre[a[i]]+1 ] = i; pre[ a[i] ] = i; } for ( int i=n; i>=0; i-- ) nxt[i] = min( nxt[i], nxt[i+1] ); int q; cin >> q; for ( int i=0; i<q; i++ ) { cin >> qer[i][0] >> qer[i][1]; qer[i][2] = 0; } for ( int p=20; p>=0; p-- ) { for ( int i=0; i<=n+1; i++ ) jmp[i] = nxt[i]; for ( int i=0; i<p; i++ ) { for ( int j=0; j<=n+1; j++ ) jmp[j] = jmp[ min( n+1, jmp[j]+1 ) ]; } /*cout << p << ": "; for ( int i=0; i<=n+1; i++ ) cout << jmp[i] << ' '; cout << '\n';*/ for ( int i=0; i<q; i++ ) { if ( qer[i][0] <= qer[i][1] && jmp[ qer[i][0] ] <= qer[i][1] ) { qer[i][2] += 1 << p; qer[i][0] = jmp[ qer[i][0] ] + 1; } } } for ( int i=0; i<q; i++ ) cout << qer[i][2] << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...