#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("Ofast")
#pragma GCC target("avx2")
#pragma GCC optimize("unroll-loops")
template <typename T>
class SegmentTreeMin
{
vector<T> t, z;
size_t l;
T neutral;
public:
SegmentTreeMin(size_t n, T _neutral)
{
neutral = _neutral;
l = 1 << (32 - __builtin_clz(n));
t = vector<T>(2 * l, neutral);
z = vector<T>(2 * l, 0);
fill(t.begin() + l, t.begin() + l + n, 0);
for (size_t i = l - 1; i; i--)
t[i] = min(t[2 * i], t[2 * i + 1]);
}
private:
void propagate(size_t k, size_t x, size_t y)
{
t[2 * k] += z[k];
t[2 * k + 1] += z[k];
z[2 * k] += z[k];
z[2 * k + 1] += z[k];
z[k] = 0;
}
void increment_r(size_t i, size_t j, T v, size_t k, size_t x, size_t y)
{
if (x > y || y < i || x > j)
return;
if (i <= x && y <= j)
{
t[k] += v;
z[k] += v;
}
else
{
propagate(k, x, y);
increment_r(i, j, v, 2 * k, x, (x + y) / 2);
increment_r(i, j, v, 2 * k + 1, (x + y) / 2 + 1, y);
t[k] = min(t[2 * k], t[2 * k + 1]);
}
}
public:
void increment(size_t i, size_t j, T v)
{
increment_r(i, j, v, 1, 0, l - 1);
}
T get_global_min() const
{
return t[1];
}
};
struct Rectangle
{
int x1, y1, x2, y2, cost;
};
struct Event
{
int x, y1, y2, cost;
Event(int _x, int _y1, int _y2, int _cost)
{
x = _x;
y1 = _y1;
y2 = _y2;
cost = _cost;
}
bool operator<(Event const &e) const
{
return x < e.x;
}
};
bool can_place_square(
vector<Rectangle> const &rectangles, int m, int n, int side_length, int b)
{
vector<Event> events;
for (Rectangle const &r : rectangles)
{
events.emplace_back(
r.x1 - side_length + 1, max(r.y1 - side_length + 1, 0), r.y2, r.cost);
events.emplace_back(
r.x2 + 1, max(r.y1 - side_length + 1, 0), r.y2, -r.cost);
}
sort(events.begin(), events.end());
SegmentTreeMin<int> tree(n - side_length + 1, INT_MAX);
int curr_x = events[0].x;
for (Event const &e : events)
{
if (curr_x > m - side_length)
return 0;
if (e.x != curr_x && 0 < e.x && curr_x <= m - side_length)
{
if (tree.get_global_min() <= b)
return 1;
curr_x = e.x;
}
tree.increment(e.y1, min(e.y2, n - side_length), e.cost);
}
return 0;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
unsigned m, n, b, p;
cin >> m >> n >> b >> p;
vector<Rectangle> rectangles(p);
for (auto &[x1, y1, x2, y2, cost] : rectangles)
{
cin >> x1 >> y1 >> x2 >> y2 >> cost;
x1--, y1--, x2--, y2--;
}
unsigned u = 0, v = min(m, n);
while (u < v)
{
unsigned side_length = (u + v + 1) / 2;
if (can_place_square(rectangles, m, n, side_length, b))
u = side_length;
else
v = side_length - 1;
}
cout << u << '\n';
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
340 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
7 ms |
732 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
39 ms |
2520 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
53 ms |
8532 KB |
Output is correct |
2 |
Correct |
296 ms |
16860 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
307 ms |
16896 KB |
Output is correct |
2 |
Correct |
144 ms |
8652 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
23 ms |
816 KB |
Output is correct |
2 |
Correct |
69 ms |
960 KB |
Output is correct |
3 |
Correct |
60 ms |
968 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
228 ms |
3776 KB |
Output is correct |
2 |
Correct |
371 ms |
3648 KB |
Output is correct |
3 |
Correct |
311 ms |
3732 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
405 ms |
10584 KB |
Output is correct |
2 |
Correct |
37 ms |
2400 KB |
Output is correct |
3 |
Correct |
248 ms |
18812 KB |
Output is correct |
4 |
Correct |
681 ms |
19024 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
581 ms |
19092 KB |
Output is correct |
2 |
Correct |
1063 ms |
19148 KB |
Output is correct |
3 |
Correct |
413 ms |
10936 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
576 ms |
11216 KB |
Output is correct |
2 |
Correct |
1339 ms |
19476 KB |
Output is correct |
3 |
Correct |
1231 ms |
19564 KB |
Output is correct |
4 |
Correct |
1343 ms |
19576 KB |
Output is correct |
5 |
Correct |
1333 ms |
19576 KB |
Output is correct |
6 |
Correct |
314 ms |
10196 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
5030 ms |
35324 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
5031 ms |
40444 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
5026 ms |
45452 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |