Submission #942795

# Submission time Handle Problem Language Result Execution time Memory
942795 2024-03-11T04:48:17 Z marvinthang Sum Zero (RMI20_sumzero) C++17
100 / 100
260 ms 17744 KB
/*************************************
*    author: marvinthang             *
*    created: 11.03.2024 10:42:17    *
*************************************/
 
#include <bits/stdc++.h>
 
using namespace std;
 
#define                  fi  first
#define                  se  second
#define                left  ___left
#define               right  ___right
#define                TIME  (1.0 * clock() / CLOCKS_PER_SEC)
#define             MASK(i)  (1LL << (i))
#define           BIT(x, i)  ((x) >> (i) & 1)
#define  __builtin_popcount  __builtin_popcountll
#define              ALL(v)  (v).begin(), (v).end()
#define           REP(i, n)  for (int i = 0, _n = (n); i < _n; ++i)
#define          REPD(i, n)  for (int i = (n); i-- > 0; )
#define        FOR(i, a, b)  for (int i = (a), _b = (b); i < _b; ++i) 
#define       FORD(i, b, a)  for (int i = (b), _a = (a); --i >= _a; ) 
#define       FORE(i, a, b)  for (int i = (a), _b = (b); i <= _b; ++i) 
#define      FORDE(i, b, a)  for (int i = (b), _a = (a); i >= _a; --i) 
#define        scan_op(...)  istream & operator >> (istream &in, __VA_ARGS__ &u)
#define       print_op(...)  ostream & operator << (ostream &out, const __VA_ARGS__ &u)
#ifdef LOCAL
    #include "debug.h"
#else
    #define file(name) if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
    #define DB(...) 23
    #define db(...) 23
    #define debug(...) 23
#endif
 
template <class U, class V> scan_op(pair <U, V>)  { return in >> u.first >> u.second; }
template <class T> scan_op(vector <T>)  { for (size_t i = 0; i < u.size(); ++i) in >> u[i]; return in; }
template <class U, class V> print_op(pair <U, V>)  { return out << '(' << u.first << ", " << u.second << ')'; }
template <size_t i, class T> ostream & print_tuple_utils(ostream &out, const T &tup) { if constexpr(i == tuple_size<T>::value) return out << ")";  else return print_tuple_utils<i + 1, T>(out << (i ? ", " : "(") << get<i>(tup), tup); }
template <class ...U> print_op(tuple<U...>) { return print_tuple_utils<0, tuple<U...>>(out, u); }
template <class Con, class = decltype(begin(declval<Con>()))> typename enable_if <!is_same<Con, string>::value, ostream&>::type operator << (ostream &out, const Con &con) { out << '{'; for (__typeof(con.begin()) it = con.begin(); it != con.end(); ++it) out << (it == con.begin() ? "" : ", ") << *it; return out << '}'; }
 
// end of template
 
void process(void) {
	int n; cin >> n;
	vector <int> left(n + 2); REP(i, n) cin >> left[i];
	map <long long, int> last;
	long long cur = 0;
	vector <int> nxt(n + 2, n + 1);
	last[0] = n;
	REPD(i, n) {
		cur += left[i];
		if (last.count(cur)) nxt[i] = last[cur];
		last[cur] = i;
	}
	last.clear();
	fill(ALL(left), 0);
	vector <int> right(n + 2, -1);
	REPD(i, n + 1) {
		nxt[i] = min(nxt[i], nxt[i + 1]);
		left[nxt[i]] = i;
		if (right[nxt[i]] == -1) right[nxt[i]] = i;
	}
	int q; cin >> q;
	vector <int> qr(q), prv, pos(n + 2, -1);
	prv.reserve(q);
	REP(i, q) {
		int l;
		cin >> l >> qr[i]; --l;
		prv.push_back(pos[l]);
		pos[l] = (int) prv.size() - 1;
	}
	vector <int> res(q), list_vertices;
	list_vertices.reserve(n);
	vector <int> dfs;
	list_vertices.push_back(n + 1);
	while (!list_vertices.empty()) {
		int u = list_vertices.back();
		if (left[u] <= right[u]) {
			list_vertices.push_back(left[u]++);
			continue;
		}
		for (int i = pos[u]; i >= 0; i = prv[i]) {
			auto p = partition_point(ALL(list_vertices), [&] (int x) { return x >= qr[i]; });
			res[i] = list_vertices.end() - p - 1 + (*prev(p) == qr[i]);
		}
		list_vertices.pop_back();
	}
	REP(i, q) cout << res[i] << '\n';
}
 
int main(void) {
	ios_base::sync_with_stdio(false); cin.tie(nullptr); // cout.tie(nullptr);
	file("sumzero");
	// int t; cin >> t; while (t--)
	process();
	// cerr << "Time elapsed: " << TIME << " s.\n";
	return (0^0);
}

Compilation message

sumzero.cpp: In function 'int main()':
sumzero.cpp:30:61: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   30 |     #define file(name) if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
      |                                                      ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
sumzero.cpp:95:2: note: in expansion of macro 'file'
   95 |  file("sumzero");
      |  ^~~~
sumzero.cpp:30:94: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   30 |     #define file(name) if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
      |                                                                                       ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
sumzero.cpp:95:2: note: in expansion of macro 'file'
   95 |  file("sumzero");
      |  ^~~~
# Verdict Execution time Memory Grader output
1 Correct 4 ms 604 KB Output is correct
2 Correct 2 ms 604 KB Output is correct
3 Correct 3 ms 604 KB Output is correct
4 Correct 3 ms 604 KB Output is correct
5 Correct 2 ms 384 KB Output is correct
6 Correct 3 ms 604 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 604 KB Output is correct
2 Correct 2 ms 604 KB Output is correct
3 Correct 3 ms 604 KB Output is correct
4 Correct 3 ms 604 KB Output is correct
5 Correct 2 ms 384 KB Output is correct
6 Correct 3 ms 604 KB Output is correct
7 Correct 50 ms 4040 KB Output is correct
8 Correct 51 ms 4692 KB Output is correct
9 Correct 55 ms 3920 KB Output is correct
10 Correct 48 ms 4172 KB Output is correct
11 Correct 46 ms 3848 KB Output is correct
12 Correct 53 ms 3964 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 604 KB Output is correct
2 Correct 2 ms 604 KB Output is correct
3 Correct 3 ms 604 KB Output is correct
4 Correct 3 ms 604 KB Output is correct
5 Correct 2 ms 384 KB Output is correct
6 Correct 3 ms 604 KB Output is correct
7 Correct 50 ms 4040 KB Output is correct
8 Correct 51 ms 4692 KB Output is correct
9 Correct 55 ms 3920 KB Output is correct
10 Correct 48 ms 4172 KB Output is correct
11 Correct 46 ms 3848 KB Output is correct
12 Correct 53 ms 3964 KB Output is correct
13 Correct 220 ms 15696 KB Output is correct
14 Correct 230 ms 17744 KB Output is correct
15 Correct 260 ms 14548 KB Output is correct
16 Correct 220 ms 17700 KB Output is correct
17 Correct 234 ms 14672 KB Output is correct
18 Correct 231 ms 14772 KB Output is correct