社区讨论
WA #9 细节求调 能试的都试了 QAQ
P1502窗口的星星参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lo7iwx32
- 此快照首次捕获于
- 2023/10/27 02:34 2 年前
- 此快照最后确认于
- 2023/11/05 08:31 2 年前
CPP
#include <bits/stdc++.h>
using namespace std;
template <typename T1>
ostream& info_base(ostream& cout, T1 const& x)
{
cout << x << "]" << endl;
return cout;
}
template <typename T1, typename... T2>
ostream const& info_base(ostream& cout, T1 const& x, T2 const&... arg)
{
cout << x << ", ";
info_base(cout, arg...);
return cout;
}
template <typename T1, typename... T2>
ostream const& info(ostream& cout, T1 const& x, T2 const&... arg)
{
cout << "[";
info_base(cout, x, arg...);
return cout;
}
template <typename T1, typename... T2>
ostream const& info(ostream& cout, T1 const& x)
{
cout << "[" << x << "]" << endl;
return cout;
}
struct line {
long long x, l, r, val;
};
line d[80004];
struct node {
long long l, r, val;
};
long long lazy_tag[80004];
node tree[80004];
long long s[80004];
long long t;
long long n, w, h, ans = 0;
void push_up(long long root)
{
tree[root].val = max(tree[root << 1].val, tree[root << 1 | 1].val);
}
void build_tree(long long root, long long l, long long r)
{
tree[root].l = s[l];
tree[root].r = s[r];
if (r - l > 1) {
long long mid = (l + r) >> 1;
build_tree(root << 1, l, mid);
build_tree(root << 1 | 1, mid, r);
}
}
void push_down(long long root)
{
tree[root << 1].val += lazy_tag[root];
tree[root << 1 | 1].val += lazy_tag[root];
lazy_tag[root << 1] += lazy_tag[root];
lazy_tag[root << 1 | 1] += lazy_tag[root];
lazy_tag[root] = 0;
}
void update_tree(long long root, long long ll, long long rr, long long val)
{
long long l = tree[root].l;
long long r = tree[root].r;
if (l >= rr || r <= ll)
return;
// info(cout, root, l, r, ll, rr, val);
if (ll <= l && r <= rr) {
tree[root].val += val;
lazy_tag[root] += val;
return;
}
long long mid = (l + r) >> 1;
push_down(root);
if (ll < tree[root << 1].r) {
// info(cout, "L");
update_tree(root << 1, ll, rr, val);
}
if (rr > tree[root << 1 | 1].l) {
// info(cout, "R");
update_tree(root << 1 | 1, ll, rr, val);
}
push_up(root);
}
int cnt = 0;
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> t;
while (t--) {
cin >> n >> w >> h;
for (long long i = 1; i <= n; i++) {
long long x, y, l;
cin >> x >> y >> l;
d[i].x = x;
d[i].l = y;
d[i].r = y + h - 1;
d[i].val = l;
d[i + n].x = x + w - 1;
d[i + n].l = y;
d[i + n].r = y + h - 1;
d[i + n].val = -l;
s[i] = y;
s[i + n] = y + h - 1;
}
cnt = 0;
// info(cout, "pass");
sort(s + 1, s + 1 + n + n);
cnt = unique(s + 1, s + 1 + n + n) - s - 1;
// info(cout, "pass");
sort(d + 1, d + 1 + n + n, [](line x, line y) {
return (x.x == y.x ? x.val > y.val : x.x < y.x);
});
// info(cout, "pass");
memset(lazy_tag, 0, sizeof(lazy_tag));
memset(tree, 0, sizeof(tree));
ans = 0;
build_tree(1, 1, cnt);
// info(cout, "pass");
for (long long i = 1; i <= n + n; i++) {
update_tree(1, d[i].l, d[i].r, d[i].val);
ans = max(ans, tree[1].val);
// info(cout, tree[1].val);
}
cout << ans << endl;
}
}
求求啦
回复
共 0 条回复,欢迎继续交流。
正在加载回复...