Submission #54214

#TimeUsernameProblemLanguageResultExecution timeMemory
54214baactreePyramid Base (IOI08_pyramid_base)C++17
0 / 100
1020 ms46884 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; ll tree[1 << 21]; const ll inf = 0x3f3f3f3f3f3f3f3f; void update(int le, int ri, ll val, int nodele, int noderi, int node) { if (le > noderi || ri < nodele)return; if (le <= nodele && noderi <= ri) { tree[node] += val; return; } int mid = (nodele + noderi) / 2; update(le, ri, val, nodele, mid, node * 2); update(le, ri, val, mid + 1, noderi, node * 2 + 1); tree[node] = min(tree[node * 2], tree[node * 2 + 1]); } ll query(int le, int ri, int nodele, int noderi, int node) { if (le > noderi || ri < nodele)return inf; if (le <= nodele && noderi <= ri)return tree[node]; int mid = (nodele + noderi) / 2; return min(query(le, ri, nodele, mid, node * 2), query(le, ri, mid + 1, noderi, node * 2 + 1)); } void init(int nodele, int noderi, int node) { tree[node] = 0; if (nodele == noderi)return; int mid = (nodele + noderi) / 2; init(nodele, mid, node * 2); init(mid + 1, noderi, node * 2 + 1); } int n, m, b, p; vector<tuple<int, int, int> > vec[1000005]; bool possi(int k) { init(1, m - k + 1, 1); for (int i = 1; i <= n; i++) { for (auto v : vec[i]) { int y1, y2, c; tie(y1, y2, c) = v; if (c > 0) update(max(1, y1 - k + 1), min(m - k + 1, y2), c, 1, m - k + 1, 1); } if (i >= k) { for (auto v : vec[i - k]) { int y1, y2, c; tie(y1, y2, c) = v; if (c < 0) update(max(1, y1 - k + 1), min(m - k + 1, y2), c, 1, m - k + 1, 1); } } if (i >= k && query(1, m - k + 1, 1, m - k + 1, 1) <= b) return true; } return false; } int main() { scanf("%d%d%d%d", &n, &m, &b, &p); for (int i = 0; i < p; i++) { int x1, y1, x2, y2, c; scanf("%d%d%d%d%d", &x1, &y1, &x2, &y2, &c); vec[x1].emplace_back(y1, y2, c); vec[x2].emplace_back(y1, y2, -c); } int le, ri, ans, mid; le = 1; ri = m; ans = 0; while (le <= ri) { mid = (le + ri) / 2; if (possi(mid)) { ans = mid; le = mid + 1; } else ri = mid - 1; } printf("%d\n", ans); return 0; }

Compilation message (stderr)

pyramid_base.cpp: In function 'int main()':
pyramid_base.cpp:52:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d%d%d", &n, &m, &b, &p);
  ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
pyramid_base.cpp:55:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d%d%d%d", &x1, &y1, &x2, &y2, &c);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...
#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...
#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...