Submission #1319895

#TimeUsernameProblemLanguageResultExecution timeMemory
1319895sonarchtSum Zero (RMI20_sumzero)C++20
61 / 100
1096 ms23956 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define ull unsigned long long #define ld long double #define pb push_back #define all(v) begin(v), end(v) #define pll pair<ll, ll> #define fi first #define se second #define vll vector<ll> #define mll map<ll, ll> mt19937_64 rng(chrono::high_resolution_clock().now().time_since_epoch().count()); const ll N = 4e5 + 6, inf = 1e18 + 7, mod = 1e9 + 7, B = 800; ll n, m, k, q, ans, a[N], pf[N], jump1[N], jump2[N]; mll mp; void solve() { cin >> n; for (int i = 1; i <= n; ++i) cin >> a[i]; for (int i = 1; i <= n; ++i) pf[i] = pf[i-1] + a[i]; // mp[pf[n]] = n+1; // li[n][0] = (a[n] == 0 ? n+1 : n+2); // mp[pf[n-1]] = n; // for (int i = n-1; i >= 1; --i) { // li[i][0] = min(mp[pf[i-1]], li[i+1][0]); // mp[pf[i-1]] = i; // } fill(jump1, jump1 + N, n+2); for (int i = n; i >= 1; --i) { mp[pf[i]] = i+1; if (mp.count(pf[i-1])) jump1[i] = mp[pf[i-1]]; jump1[i] = min(jump1[i], jump1[i+1]); } //for (int i = 1; i <= n+2; ++i) cout << jump1[i] << " "; cout << endl; for (int i = 1; i <= n; ++i) { ll u = i; for (int j = 1; j <= B; ++j) u = jump1[u]; jump2[i] = u; } cin >> q; while (q--) { ll l, r; cin >> l >> r; ll u = l, ans = 0; while (jump2[u] <= r+1) { ans += B; u = jump2[u]; } while (jump1[u] <= r+1) { ++ans; u = jump1[u]; } // for (int j = 20; j >= 0; --j) { // if (li[u][j] && li[u][j] <= r+1) { // ans += (1 << j); // u = li[u][j]; // //cout << j << endl; // } // } cout << ans << endl; } return; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); if (fopen(".INP", "r")) { freopen(".INP", "r", stdin); freopen(".OUT", "w", stdout); } ll tc = 1; // cin >> tc; while (tc--) { solve(); } return 0; }

Compilation message (stderr)

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