Submission #891673

#TimeUsernameProblemLanguageResultExecution timeMemory
891673MackerPyramid Base (IOI08_pyramid_base)C++17
30 / 100
5057 ms86148 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define all(v) v.begin(), v.end() class SegTree{ public: vector<int> st; vector<int> lz; int len = 1; SegTree(int n){ while(len < n) len *= 2; st.resize(2 * len, INT_MAX); for (int i = len; i < len + n; i++){ st[i] = 0; } for (int i = len - 1; i > 0; i--) { st[i] = min(st[i * 2], st[i * 2 + 1]); } lz.resize(2 * len, 0); } void prop(int i){ st[i * 2] += lz[i]; st[i * 2 + 1] += lz[i]; lz[i * 2] += lz[i]; lz[i * 2 + 1] += lz[i]; lz[i] = 0; } void add(int f, int t, int v, int i, int s, int e){ if(f >= e || s >= t) return; if(f <= s && e <= t){ st[i] += v; lz[i] += v; return; } prop(i); add(f, t, v, i * 2, s, (s + e) / 2); add(f, t, v, i * 2 + 1, (s + e) / 2, e); st[i] = min(st[i * 2], st[i * 2 + 1]); } void add(int f, int t, int v) { add(f, t, v, 1, 0, len); } }; bool can(int d, vector<array<int, 5>> v, int w, int h){ w -= d; h -= d; for (auto &i : v) { i[0] -= d; i[1] -= d; for (int j = 0; j < 4; j++) { i[0] = max(0, i[0]); i[1] = max(0, i[1]); i[2] = min(w - 1, i[2]); i[3] = min(h - 1, i[3]); } } vector<vector<array<int, 3>>> ev(h + 1); //[y][i] -> t(0s, 1e), x, xx SegTree st(w); for (auto &i : v) { ev[i[1]].push_back({0, i[0], i[2]}); ev[i[3] + 1].push_back({1, i[0], i[2]}); } int y = 0; for (auto &es : ev) { for (auto &e : es) { auto& [t, x, xx] = e; if(t == 0){ st.add(x, xx + 1, 1); } else{ st.add(x, xx + 1, -1); } } if(st.st[1] == 0 && y != h) return true; y++; } return false; } int main() { int w, h; cin >> w >> h; int b; cin >> b; int n; cin >> n; vector<array<int, 5>> v(n); for (auto &i : v){ cin >> i[0] >> i[1] >> i[2] >> i[3] >> i[4]; for (int j = 0; j < 4; j++) i[j]--; } int l = 0, r = min(w, h), mid; while(l < r){ mid = (l + r + 1) / 2; if(can(mid, v, w, h)) l = mid; else r = mid - 1; } cout << l + 1 << endl; }
#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...