#include <bits/stdc++.h>
using namespace std;
#define pb push_back
typedef long long ll;
const int len = 1e6+4;
const ll inf = 1e16;
int cost[len], n, m, bud, q;
vector<int> buck[len];
struct rectangle{
int x1, x2, y1, y2;
} rec[len];
struct node{
ll mn, lazy;
node(ll mn_ = 0, ll lazy_ = 0){
mn = mn_;
lazy = lazy_;
}
} tree[4*len];
void prop(int p, int l, int r){
if (!tree[p].lazy) return;
tree[p].mn += tree[p].lazy;
if (l != r){
tree[2*p].lazy += tree[p].lazy;
tree[2*p+1].lazy += tree[p].lazy;
}
tree[p].lazy = 0;
}
void update(int p, int l, int r, int i, int j, int v){
prop(p, l, r);
if (i <= l && r <= j)
return void(tree[p].lazy += v);
int mid = (l+r)/2;
if (i <= mid)
update(2*p, l, mid, i, j, v);
if (j >= mid+1)
update(2*p+1, mid+1, r, i, j, v);
prop(2*p, l, mid), prop(2*p+1, mid+1, r);
tree[p].mn = min(tree[2*p].mn, tree[2*p+1].mn);
}
ll query(int p, int l, int r, int i, int j){
prop(p, l, r);
if (r < i || j < l)
return inf;
if (i <= l && r <= j)
return tree[p].mn;
int mid = (l+r)/2;
return min(query(2*p, l, mid, i, j), query(2*p+1, mid+1, r, i, j));
}
bool check(int k){
for (int i = 1; i <= q; i++){
int y1 = rec[i].y1, y2 = rec[i].y2;
buck[max(1, y1-k+1)].pb(i);
buck[y2+1].pb(-i);
}
bool ans = false;
for (int y = 1; y <= m+1; y++){
int must = (y==1);
for (int j = 0; j < buck[y].size(); j++){
int i = abs(buck[y][j]);
int x1 = rec[i].x1, x2 = rec[i].x2;
if (buck[y][j] > 0)
update(1, 1, n, max(1, x1-k+1), x2, cost[i]);
else
must = 1, update(1, 1, n, max(1, x1-k+1), x2, -cost[i]);
}
buck[y].clear();
if (must && y <= m-k+1)
ans |= (query(1, 1, n, 1, n-k+1) <= bud);
}
return ans;
}
int bs(){
int l = 1, r = min(n, m), ans = 0;
while (l <= r){
int mid = (l+r)/2;
if (check(mid))
ans = mid, l = mid+1;
else
r = mid-1;
}
return ans;
}
int main(){
scanf("%d %d %d %d", &n, &m, &bud, &q);
for (int i = 1; i <= q; i++)
scanf("%d %d %d %d %d", &rec[i].x1, &rec[i].y1, &rec[i].x2, &rec[i].y2, &cost[i]);
printf("%d\n", bs());
return 0;
}
Compilation message
pyramid_base.cpp: In function 'bool check(int)':
pyramid_base.cpp:75:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
75 | for (int j = 0; j < buck[y].size(); j++){
| ~~^~~~~~~~~~~~~~~~
pyramid_base.cpp: In function 'int main()':
pyramid_base.cpp:107:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
107 | scanf("%d %d %d %d", &n, &m, &bud, &q);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
pyramid_base.cpp:109:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
109 | scanf("%d %d %d %d %d", &rec[i].x1, &rec[i].y1, &rec[i].x2, &rec[i].y2, &cost[i]);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
54 ms |
86424 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
51 ms |
86392 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
57 ms |
86648 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
65 ms |
86648 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
95 ms |
86904 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
156 ms |
86648 KB |
Output is correct |
2 |
Correct |
179 ms |
86904 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
230 ms |
87080 KB |
Output is correct |
2 |
Correct |
148 ms |
86520 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
102 ms |
86780 KB |
Output is correct |
2 |
Correct |
144 ms |
86908 KB |
Output is correct |
3 |
Correct |
129 ms |
86964 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
651 ms |
89208 KB |
Output is correct |
2 |
Correct |
696 ms |
89728 KB |
Output is correct |
3 |
Correct |
547 ms |
89832 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1466 ms |
92264 KB |
Output is correct |
2 |
Correct |
500 ms |
87672 KB |
Output is correct |
3 |
Correct |
211 ms |
91864 KB |
Output is correct |
4 |
Correct |
1722 ms |
95864 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1914 ms |
95056 KB |
Output is correct |
2 |
Correct |
1689 ms |
97420 KB |
Output is correct |
3 |
Correct |
1255 ms |
90108 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1788 ms |
93196 KB |
Output is correct |
2 |
Correct |
2529 ms |
100208 KB |
Output is correct |
3 |
Correct |
2475 ms |
100096 KB |
Output is correct |
4 |
Correct |
2390 ms |
100352 KB |
Output is correct |
5 |
Correct |
2273 ms |
99844 KB |
Output is correct |
6 |
Correct |
1462 ms |
89720 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
5032 ms |
117472 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
5038 ms |
119948 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
5038 ms |
122100 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |