Submission #1033228

#TimeUsernameProblemLanguageResultExecution timeMemory
1033228RecursiveCoJobs (BOI24_jobs)C++17
29 / 100
88 ms41724 KiB
// CF template, version 3.0 #include <bits/stdc++.h> using namespace std; #define improvePerformance ios_base::sync_with_stdio(false); cin.tie(0) #define getTest int t; cin >> t #define eachTest for (int _var=0;_var<t;_var++) #define get(name) int (name); cin >> (name) #define out(o) cout << (o) #define getList(cnt, name) vector<int> (name); for (int _=0;_<(cnt);_++) { get(a); (name).push_back(a); } #define sortl(name) sort((name).begin(), (name).end()) #define rev(name) reverse((name).begin(), (name).end()) #define forto(name, var) for (int (var) = 0; (var) < (name); (var)++) #define decision(b) if (b){out("YES");}else{out("NO");} #define int long long int template <typename T, typename I> struct segtree { int n; vector<T> tree; vector<I> initial; T id; segtree(int i_n, vector<I> i_initial, T i_id): n(i_n), initial(i_initial), id(i_id) { tree.resize(4 * n); } T conquer(T left, T right) { // write your conquer function } T value(I inp) { // write your value function } void build(int v, int l, int r) { if (l == r) tree[v] = value(initial[l]); else { int middle = (l + r) / 2; build(2 * v, l, middle); build(2 * v + 1, middle + 1, r); tree[v] = conquer(tree[2 * v], tree[2 * v + 1]); } } void upd(int v, int l, int r, int i, I x) { if (l == r) tree[v] = value(x); else { int middle = (l + r) / 2; if (middle >= i) upd(2 * v, l, middle, i, x); else upd(2 * v + 1, middle + 1, r, i, x); tree[v] = conquer(tree[2 * v], tree[2 * v + 1]); } } T query(int v, int l, int r, int ql, int qr) { if (ql <= l && r <= qr) return tree[v]; else if (r < ql || qr < l) return id; int middle = (l + r) / 2; T left = query(2 * v, l, middle, ql, qr); T right = query(2 * v + 1, middle + 1, r, ql, qr); return conquer(left, right); } }; // vector<int> signed main() { improvePerformance; //getTest; //eachTest { // only solves the path case. get(n); get(s); int ors = s; vector<vector<int>> pathst; vector<int> cur; forto(n, i) { get(x); get(p); if (p == 0 && i) { pathst.push_back(cur); cur.clear(); } cur.push_back(x); } pathst.push_back(cur); vector<vector<int>> pathsnx; for (vector<int> path: pathst) { bool sign = false; // negative bool activated = false; int count = 0; vector<int> newpath; for (int x: path) { if (activated) { if (x < 0 && sign) { sign = false; newpath.push_back(count); count = 0; } else if (x > 0 && !sign) { sign = true; newpath.push_back(count); count = 0; } count += x; } if (x < 0 && !activated) { activated = true; count += x; } else if (!activated) { s += x; } } if (sign) newpath.push_back(count); if (!newpath.empty()) pathsnx.push_back(newpath); } vector<vector<pair<int, int>>> paths; for (vector<int> path: pathsnx) { int minbal = 0; int bal = 0; vector<pair<int, int>> newpath; for (int x: path) { bal += x; minbal = min(minbal, bal); if (bal > 0) { newpath.push_back({minbal, bal}); minbal = 0; bal = 0; } } rev(newpath); paths.push_back(newpath); } priority_queue<array<int, 3>> pq; int sz = paths.size(); forto(sz, i) if (!paths[i].empty()) pq.push({paths[i].back().first, paths[i].back().second, i}); while (!pq.empty()) { auto top = pq.top(); int needed = -top[0]; if (needed > s) break; s += top[1]; int ind = top[2]; pq.pop(); paths[ind].pop_back(); if (!paths[ind].empty()) pq.push({paths[ind].back().first, paths[ind].back().second, ind}); } out(s - ors); //} }

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:10:23: warning: unnecessary parentheses in declaration of 'n' [-Wparentheses]
   10 | #define get(name) int (name); cin >> (name)
      |                       ^
Main.cpp:77:9: note: in expansion of macro 'get'
   77 |         get(n);
      |         ^~~
Main.cpp:10:23: warning: unnecessary parentheses in declaration of 's' [-Wparentheses]
   10 | #define get(name) int (name); cin >> (name)
      |                       ^
Main.cpp:78:9: note: in expansion of macro 'get'
   78 |         get(s);
      |         ^~~
Main.cpp:15:35: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   15 | #define forto(name, var) for (int (var) = 0; (var) < (name); (var)++)
      |                                   ^
Main.cpp:82:9: note: in expansion of macro 'forto'
   82 |         forto(n, i) {
      |         ^~~~~
Main.cpp:10:23: warning: unnecessary parentheses in declaration of 'x' [-Wparentheses]
   10 | #define get(name) int (name); cin >> (name)
      |                       ^
Main.cpp:83:13: note: in expansion of macro 'get'
   83 |             get(x);
      |             ^~~
Main.cpp:10:23: warning: unnecessary parentheses in declaration of 'p' [-Wparentheses]
   10 | #define get(name) int (name); cin >> (name)
      |                       ^
Main.cpp:84:13: note: in expansion of macro 'get'
   84 |             get(p);
      |             ^~~
Main.cpp:15:35: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   15 | #define forto(name, var) for (int (var) = 0; (var) < (name); (var)++)
      |                                   ^
Main.cpp:140:9: note: in expansion of macro 'forto'
  140 |         forto(sz, i) if (!paths[i].empty()) pq.push({paths[i].back().first, paths[i].back().second, i});
      |         ^~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...