Submission #54244

# Submission time Handle Problem Language Result Execution time Memory
54244 2018-07-02T21:57:40 Z baactree Pyramid Base (IOI08_pyramid_base) C++17
70 / 100
5000 ms 71444 KB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll tree[1 << 21];
ll v[1 << 21];
const ll inf = 0x3f3f3f3f3f3f3f3f;
void update(int le, int ri, ll val, int nodele, int noderi, int node) {
	if (le > noderi || ri < nodele)return;
	if (le <= nodele && noderi <= ri) {
		v[node] += val;
		tree[node] += val;
		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] = min(tree[node * 2], tree[node * 2 + 1])+v[node];
}
int n, m, b, p;
vector<tuple<int, int, int> > vec[1000005];
bool possi(int k) {
	memset(tree, 0, sizeof(tree));
	memset(v, 0, sizeof(v));
	for (int i = 1; i <= n; i++) {
		for (auto v : vec[i]) {
			int y1, y2, c;
			tie(y1, y2, c) = v;
			if (c > 0) update(max(1, y1 - k + 1), min(m - k + 1, y2), c, 1, m - k + 1, 1);
		}
		if (i >= k) {
			for (auto v : vec[i - k]) {
				int y1, y2, c;
				tie(y1, y2, c) = v;
				if (c < 0) update(max(1, y1 - k + 1), min(m - k + 1, y2), c, 1, m - k + 1, 1);
			}
		}
		if (i >= k && tree[1] <= b) return true;
	}
	return false;
}
int main() {
	scanf("%d%d%d%d", &n, &m, &b, &p);
	for (int i = 0; i < p; i++) {
		int x1, y1, x2, y2, c;
		scanf("%d%d%d%d%d", &x1, &y1, &x2, &y2, &c);
		vec[x1].emplace_back(y1, y2, c);
		vec[x2].emplace_back(y1, y2, -c);
	}
	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 'int main()':
pyramid_base.cpp:42:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d%d%d", &n, &m, &b, &p);
  ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
pyramid_base.cpp:45:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d%d%d%d", &x1, &y1, &x2, &y2, &c);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 77 ms 56696 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 80 ms 56800 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 113 ms 56848 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 154 ms 56848 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 193 ms 56892 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 270 ms 56892 KB Output is correct
2 Correct 321 ms 56892 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 381 ms 56892 KB Output is correct
2 Correct 286 ms 56892 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 164 ms 56968 KB Output is correct
2 Correct 185 ms 56984 KB Output is correct
3 Correct 159 ms 57036 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 300 ms 57572 KB Output is correct
2 Correct 466 ms 57740 KB Output is correct
3 Correct 432 ms 57740 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 475 ms 58060 KB Output is correct
2 Correct 125 ms 58188 KB Output is correct
3 Correct 588 ms 58188 KB Output is correct
4 Correct 676 ms 58188 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 706 ms 58196 KB Output is correct
2 Correct 1227 ms 58452 KB Output is correct
3 Correct 460 ms 58452 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 622 ms 58576 KB Output is correct
2 Correct 1430 ms 58724 KB Output is correct
3 Correct 1431 ms 58724 KB Output is correct
4 Correct 1489 ms 58724 KB Output is correct
5 Correct 1429 ms 58724 KB Output is correct
6 Correct 372 ms 58984 KB Output is correct
# Verdict Execution time Memory Grader output
1 Execution timed out 5083 ms 67436 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 5063 ms 71444 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 5006 ms 71444 KB Time limit exceeded
2 Halted 0 ms 0 KB -