#include <bits/stdc++.h>
using namespace std;
namespace fio {
const int BSIZE = 1 << 17;
unsigned char buffer[BSIZE];
auto p = buffer + BSIZE;
inline unsigned char readChar() {
if (p == buffer + BSIZE) {
fread(buffer, 1, BSIZE, stdin);
p = buffer;
}
return *p++;
}
int readInt() {
unsigned char c = readChar();
while (c < '-') {
c = readChar();
}
int ret = 0;
while (c >= '-') {
ret = ret * 10 + c - '0';
c = readChar();
}
return ret;
}
}
typedef long long ll;
ll tree[1 << 21][2];
const ll inf = 0x3f3f3f3f3f3f3f3f;
void push(int nodele, int noderi, int node) {
tree[node][0] += tree[node][1];
if (nodele != noderi) {
tree[node * 2][1] += tree[node][1];
tree[node * 2 + 1][1] += tree[node][1];
}
tree[node][1] = 0;
}
void update(int le, int ri, ll val, int nodele, int noderi, int node) {
if (tree[node][1])push(nodele, noderi, node);
if (le > noderi || ri < nodele)return;
if (le <= nodele && noderi <= ri) {
tree[node][1] = val;
push(nodele, noderi, node);
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][0] = min(tree[node * 2][0], tree[node * 2 + 1][0]);
}
ll query(int le, int ri, int nodele, int noderi, int node) {
if (tree[node][1])push(nodele, noderi, node);
if (le > noderi || ri < nodele)return inf;
if (le <= nodele && noderi <= ri)return tree[node][0];
int mid = (nodele + noderi) / 2;
return min(query(le, ri, nodele, mid, node * 2), query(le, ri, mid + 1, noderi, node * 2 + 1));
}
int n, m, b, p;
vector<tuple<int, int, int> > vec[1000005];
int btree[1000005];
void bupdate(int idx, int val,int k) {
while (idx <= m - k + 1) {
btree[idx] += val;
idx += idx & (-idx);
}
}
int bquery(int idx) {
int ret = 0;
while (idx) {
ret += btree[idx];
idx -= idx & (-idx);
}
return ret;
}
bool possi(int k) {
if(b)memset(tree, 0, sizeof(tree));
else {
for (int i = 1; i <= m - k + 1; i++)
btree[i] = 0;
}
for (int i = 1; i <= n; i++) {
for (auto v : vec[i]) {
int y1, y2, c;
tie(y1, y2, c) = v;
if (c > 0) {
if (b)update(max(1, y1 - k + 1), min(m - k + 1, y2), c, 1, m - k + 1, 1);
else {
bupdate(max(1, y1 - k + 1), 1, k);
bupdate(min(m - k + 1, y2) + 1, -1, k);
}
}
}
if (i >= k) {
for (auto v : vec[i - k]) {
int y1, y2, c;
tie(y1, y2, c) = v;
if (c < 0) {
if (b)update(max(1, y1 - k + 1), min(m - k + 1, y2), c, 1, m - k + 1, 1);
else {
bupdate(max(1, y1 - k + 1), 1, k);
bupdate(min(m - k + 1, y2) + 1, -1, k);
}
}
}
}
if (i >= k && (b ? query(1, m - k + 1, 1, m - k + 1, 1) <= b : bquery(m - k + 1) == m - k + 1)) return true;
}
return false;
}
int main() {
//scanf("%d%d%d%d", &n, &m, &b, &p);
n = fio::readInt();
m = fio::readInt();
b = fio::readInt();
p = fio::readInt();
for (int i = 0; i < p; i++) {
int x1, y1, x2, y2, c;
//scanf("%d%d%d%d%d", &x1, &y1, &x2, &y2, &c);
x1 = fio::readInt();
y1 = fio::readInt();
x2 = fio::readInt();
y2 = fio::readInt();
c = fio::readInt();
vec[x1].emplace_back(y1, y2, b ? c : 1);
vec[x2].emplace_back(y1, y2, b ? -c : -1);
}
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
pyramid_base.cpp: In function 'unsigned char fio::readChar()':
pyramid_base.cpp:9:9: warning: ignoring return value of 'size_t fread(void*, size_t, size_t, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
fread(buffer, 1, BSIZE, stdin);
~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
22 ms |
23800 KB |
Output isn't correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
21 ms |
23912 KB |
Output isn't correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
24 ms |
23992 KB |
Output isn't correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
31 ms |
24144 KB |
Output isn't correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
40 ms |
24440 KB |
Output isn't correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
276 ms |
28032 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
292 ms |
28032 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
148 ms |
57128 KB |
Output is correct |
2 |
Correct |
239 ms |
57328 KB |
Output is correct |
3 |
Correct |
187 ms |
57328 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
408 ms |
57768 KB |
Output is correct |
2 |
Correct |
674 ms |
57920 KB |
Output is correct |
3 |
Correct |
507 ms |
57920 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
521 ms |
58188 KB |
Output is correct |
2 |
Correct |
115 ms |
58304 KB |
Output is correct |
3 |
Correct |
786 ms |
58304 KB |
Output is correct |
4 |
Correct |
818 ms |
58304 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
841 ms |
58320 KB |
Output is correct |
2 |
Correct |
1556 ms |
58400 KB |
Output is correct |
3 |
Correct |
419 ms |
58576 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
743 ms |
58576 KB |
Output is correct |
2 |
Correct |
2017 ms |
58832 KB |
Output is correct |
3 |
Correct |
1934 ms |
58832 KB |
Output is correct |
4 |
Correct |
2005 ms |
58832 KB |
Output is correct |
5 |
Correct |
1976 ms |
58832 KB |
Output is correct |
6 |
Correct |
404 ms |
58952 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
2297 ms |
58952 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
3428 ms |
58952 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
3947 ms |
58952 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |