Submission #942664

#TimeUsernameProblemLanguageResultExecution timeMemory
942664vjudge1Sum Zero (RMI20_sumzero)C++17
61 / 100
228 ms24988 KiB
#include <bits/stdc++.h> using namespace std; const int maxN = 4e5 + 5; int arr[maxN]; struct query_info { int l; int r; int idx; } query[maxN]; bool cmp_query(const query_info &a, const query_info &b) { return a.l > b.l; } map<long long, int> helper; map<long long, int>::iterator m_iter; int lq[maxN], val[maxN]; int last_l; int calc(const int &l, const int &r) { //cout << "Start " << l << ' ' << r << '\n'; if(r < l)return 0; if(val[r])last_l = lq[r]; val[r] = val[r] + calc(l, lq[r] - 1); lq[r] = (val[r] ? last_l : l); //cout << " Calc " << l << ' ' << r << ' ' << val[r] << '\n'; return val[r]; } int re[maxN]; int res[maxN]; int n, q; int main() { if(fopen("input.txt", "r")) { freopen("input.txt", "r", stdin); } ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n; for(int i = 1; i <= n; ++i) { cin >> arr[i]; lq[i] = i; val[i] = 0; } cin >> q; for(int i = 1; i <= q; ++i) { cin >> query[i].l >> query[i].r; query[i].idx = i; } sort(query + 1, query + q + 1, cmp_query); helper.clear(); helper.insert(make_pair(0LL, n + 1)); long long sum = 0; for(int i = n; i > 0; --i) { re[i] = -1; sum += arr[i]; m_iter = helper.find(sum); if(m_iter == helper.end()) { helper.insert(make_pair(sum, i)); } else { re[i] = m_iter->second - 1; m_iter->second = i; } } int itl = n; for(int i = 1; i <= q; ++i) { while(itl >= query[i].l) { if(re[itl] != -1) { calc(itl, re[itl]); if(!val[re[itl]]) { val[re[itl]] = 1; lq[re[itl]] = itl; calc(itl, re[itl]); for(int j = re[itl] + 1; j <= n; ++j) if(val[j])break; else { lq[j] = re[itl] + 1; //cout << "Set lq of " << j << " to " << re[itl] + 1 << '\n'; } } } itl--; } res[query[i].idx] = calc(query[i].l, query[i].r); } for(int i = 1; i <= q; ++i) cout << res[i] << '\n'; return 0; }

Compilation message (stderr)

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