#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
struct Seg{
int tree[2202000], lazy[2202000];
void init(int i, int l, int r){
tree[i] = lazy[i] = 0;
if (l==r) return;
int m = (l+r)>>1;
init(i<<1, l, m); init(i<<1|1, m+1, r);
}
void propagate(int i, int l, int r){
tree[i] += lazy[i];
if (l!=r) lazy[i<<1] += lazy[i], lazy[i<<1|1] += lazy[i];
lazy[i] = 0;
}
void update(int i, int l, int r, int s, int e, int x){
propagate(i, l, r);
if (r<s || e<l) return;
if (s<=l && r<=e){
lazy[i] += x;
propagate(i, l, r);
return;
}
int m = (l+r)>>1;
update(i<<1, l, m, s, e, x);
update(i<<1|1, m+1, r, s, e, x);
tree[i] = min(tree[i<<1], tree[i<<1|1]);
}
}tree;
struct Query{
int l, r, c;
Query(){}
Query(int _l, int _r, int _c): l(_l), r(_r), c(_c) {}
};
vector<Query> L[1001000], R[1001000];
int n, m, B;
bool calc(int x){
tree.init(1, 1, m-x+1);
for (int i=1;i<=x;i++){
for (auto &p:L[i]){
tree.update(1, 1, m-x+1, max(1, p.l-x+1), min(m-x+1, p.r), p.c);
//if (x==3) printf("%d: %d %d -> %d %d\n", i, p.l, p.r, max(1, p.l-x+1), min(m-x+1, p.r));
}
}
if (tree.tree[1]<=B) return 1;
for (int i=x+1;i<=n;i++){
for (auto &p:R[i-x]){
tree.update(1, 1, m-x+1, max(1, p.l-x+1), min(m-x+1, p.r), p.c);
}
for (auto &p:L[i]){
tree.update(1, 1, m-x+1, max(1, p.l-x+1), min(m-x+1, p.r), p.c);
}
if (tree.tree[1]<=B) return 1;
}
return 0;
}
struct Node{
int l, r, mn, len, prf, suf, ran;
Node(){}
Node(int _l, int _r, int _mn, int _len, int _prf, int _suf, int _ran): l(_l), r(_r), mn(_mn), len(_len), prf(_prf), suf(_suf), ran(_ran) {}
Node operator +(const Node &N) const{
if (l==-1) return N;
if (N.l==-1) return *this;
Node ret(l, N.r, min(mn, N.mn), len + N.len, prf, N.suf, max(ran, N.ran));
if (prf==len && l==N.l) ret.prf = len + N.prf;
if (N.suf==N.len && r==N.r) ret.suf = suf + N.len;
if (r==N.l) ret.ran = max(ret.ran, suf + N.prf);
return ret;
}
}I(-1, 0, 0, 0, 0, 0, 0);
struct Seg2{
Node tree[2202000];
int lazy[2202000];
void init(int i, int l, int r){
lazy[i] = 0;
if (l==r) {tree[i] = Node(0, 0, 0, 1, 1, 1, 1); return;}
int m = (l+r)>>1;
init(i<<1, l, m); init(i<<1|1, m+1, r);
tree[i] = tree[i<<1] + tree[i<<1|1];
}
void propagate(int i, int l, int r){
tree[i].l += lazy[i];
tree[i].r += lazy[i];
tree[i].mn += lazy[i];
if (l!=r) lazy[i<<1] += lazy[i], lazy[i<<1|1] += lazy[i];
lazy[i] = 0;
}
void update(int i, int l, int r, int s, int e, int x){
propagate(i, l, r);
if (r<s || e<l) return;
if (s<=l && r<=e){
lazy[i] += x;
propagate(i, l, r);
return;
}
int m = (l+r)>>1;
update(i<<1, l, m, s, e, x);
update(i<<1|1, m+1, r, s, e, x);
tree[i] = tree[i<<1] + tree[i<<1|1];
}
int calc(){
if (tree[1].mn) return 0;
return tree[1].ran;
}
}tree2;
void solve(){
int l = 0, ans = 0;
tree2.init(1, 1, m);
for (int i=1;i<=n;i++){
for (auto &q:L[i]) tree2.update(1, 1, m, q.l, q.r, q.c);
while(l<i && tree2.calc() < i-l){
for (auto &q:R[l]) tree2.update(1, 1, m, q.l, q.r, q.c);
l++;
}
ans = max(ans, i-l);
}
printf("%d\n", ans);
exit(0);
}
int main(){
scanf("%d %d %d", &m, &n, &B);
int q;
scanf("%d", &q);
for (int i=0;i<q;i++){
int x1, y1, x2, y2, c;
scanf("%d %d %d %d %d", &x1, &y1, &x2, &y2, &c);
if (B==0) c = 1;
L[y1].emplace_back(x1, x2, c);
R[y2].emplace_back(x1, x2, -c);
}
if (B==0) solve();
int l = 1, r = min(m, n), ans = 0;
while(l<=r){
int mid = (l+r)>>1;
if (calc(mid)) l = mid+1, ans = mid;
else r = mid-1;
}
//printf("YES\n");
//printf("%d\n", calc(3));
printf("%d\n", ans);
return 0;
}
Compilation message
pyramid_base.cpp: In function 'int main()':
pyramid_base.cpp:136:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
136 | scanf("%d %d %d", &m, &n, &B);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
pyramid_base.cpp:139:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
139 | scanf("%d", &q);
| ~~~~~^~~~~~~~~~
pyramid_base.cpp:142:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
142 | scanf("%d %d %d %d %d", &x1, &y1, &x2, &y2, &c);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
26 ms |
47236 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
23 ms |
47276 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
23 ms |
47344 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
26 ms |
48332 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
29 ms |
55592 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
72 ms |
113004 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
79 ms |
113104 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
35 ms |
47712 KB |
Output is correct |
2 |
Correct |
52 ms |
47700 KB |
Output is correct |
3 |
Correct |
73 ms |
47800 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
119 ms |
50240 KB |
Output is correct |
2 |
Correct |
253 ms |
50216 KB |
Output is correct |
3 |
Correct |
217 ms |
50136 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
270 ms |
56644 KB |
Output is correct |
2 |
Correct |
190 ms |
64520 KB |
Output is correct |
3 |
Correct |
67 ms |
48536 KB |
Output is correct |
4 |
Correct |
689 ms |
64956 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
484 ms |
65268 KB |
Output is correct |
2 |
Correct |
819 ms |
65048 KB |
Output is correct |
3 |
Correct |
210 ms |
57060 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
360 ms |
57300 KB |
Output is correct |
2 |
Correct |
1105 ms |
65460 KB |
Output is correct |
3 |
Correct |
961 ms |
65452 KB |
Output is correct |
4 |
Correct |
1108 ms |
65580 KB |
Output is correct |
5 |
Correct |
979 ms |
65400 KB |
Output is correct |
6 |
Correct |
162 ms |
57284 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
840 ms |
124520 KB |
Output is correct |
2 |
Incorrect |
419 ms |
123744 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
928 ms |
129496 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
1135 ms |
134112 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |