提出 #71339036
ソースコード 拡げる
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
#define pb push_back
#define fi first
#define se second
#ifdef reimufumo
#define owo(x) cerr << x
#else
#define owo(x) (void(0))
#endif
struct SegmentTree {
struct Node {
ll val = 1;
set<ll> ind;
ll ls = -1;
ll rs = -1;
ll lazy = -1;
set<array<ll, 2>> lazyind;
};
vector<Node> d;
ll idx = 0;
const ll n;
vector<ll> a;
void pushup(ll p) {
d[p].val = d[d[p].ls].val + d[d[p].rs].val;
}
void pushdown(ll s, ll t, ll p) {
if (d[p].ls == -1) {
d[p].ls = ++idx;
d.push_back(Node());
}
if (d[p].rs == -1) {
d[p].rs = ++idx;
d.push_back(Node());
}
d[d[p].ls].val += d[p].lazy;
for (auto [x, o] : d[p].lazyind) {
if (o) {
d[d[p].ls].ind.insert(x);
} else {
d[d[p].ls].ind.erase(x);
}
d[d[p].ls].lazyind.insert({x, o});
}
d[d[p].ls].lazy += d[p].lazy;
d[d[p].rs].val += d[p].lazy;
d[d[p].rs].ind = d[p].ind;
d[d[p].rs].lazy += d[p].lazy;
for (auto [x, o] : d[p].lazyind) {
if (o) {
d[d[p].rs].ind.insert(x);
} else {
d[d[p].rs].ind.erase(x);
}
d[d[p].rs].lazyind.insert({x, o});
}
d[p].lazy = 0;
}
void build(ll s, ll t, ll p) {
if (s == t) {
d[p].val = a[s];
d[p].lazy = 0;
return;
}
ll mid = s + (t - s) / 2ll;
pushdown(s, t, p);
build(s, mid, d[p].ls);
build(mid + 1, t, d[p].rs);
pushup(p);
}
void update(ll l, ll r, ll c, ll ind, ll s, ll t, ll p) {
if (l <= s && t <= r) {
d[p].val += c;
if (c == 1) d[p].ind.insert(ind);
else d[p].ind.erase(ind);
d[p].lazy += c;
if (c == 1) d[p].lazyind.insert({ind, 1});
else d[p].lazyind.insert({ind, -1});
return;
}
ll mid = s + (t - s) / 2ll;
pushdown(s, t, p);
if (l <= mid) update(l, r, c, ind, s, mid, d[p].ls);
if (r > mid) update(l, r, c, ind, mid + 1, t, d[p].rs);
pushup(p);
}
pair<ll, set<ll>> getsum(ll l, ll r, ll s, ll t, ll p) {
if (l <= s && t <= r) return {d[p].val, d[p].ind};
ll mid = s + (t - s) / 2ll;
pair<ll, set<ll>> ret; ret.fi = 0;
pushdown(s, t, p);
if (l <= mid) {
pair<ll, set<ll>> now = getsum(l, r, s, mid, d[p].ls);
ret.fi += now.fi; ret.se = now.se;
}
if (r > mid) {
pair<ll, set<ll>> now = getsum(l, r, mid + 1, t, d[p].rs);
ret.fi += now.fi, ret.se = now.se;
}
pushup(p);
return ret;
}
SegmentTree(ll _n, vector<ll> _a) : n(_n), a(_a) {
d.push_back(Node());
build(1, n, 0);
}
};
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
ll n; cin >> n;
array<ll, 4> clouds[n + 1];
priority_queue<array<ll, 2>> rowin, rowout;
for (int i = 1; i <= n; i++) {
ll u, d, l, r;
cin >> u >> d >> l >> r;
clouds[i] = {u, d, l, r};
rowin.push({-u, i});
rowout.push({-d, i});
}
SegmentTree segtree(2000, vector<ll>(2001));
ll covered = 0, cnt[n + 1];
memset(cnt, 0, sizeof(cnt));
for (int row = 1; row <= 7; row++) {
while (!rowin.empty() && row == -rowin.top()[0]) {
ll ind = rowin.top()[1]; rowin.pop();
segtree.update(clouds[ind][2], clouds[ind][3], 1, ind, 1, 2000, 0);
#ifdef reimufumo
cerr << clouds[ind][2] << ' ' << clouds[ind][3] << '\n';
#endif
}
#ifdef reimufumo
cerr << row << "; " << -rowin.top()[0] << ' ' << -rowout.top()[0] << ": ";
//for (auto [u, ind]: cur) cerr << u << ", " << ind << "; ";
cerr << '\n';
#endif
for (int col = 1; col <= 7; col++) {
auto [num, ind] = segtree.getsum(col, col, 1, 2000, 0);
if (num == 1) cnt[*ind.begin()]++;
if (num >= 1) covered++;
#ifdef reimufumo
cerr << row << ' ' << col << ' ' << num << ' ' << *ind.begin() << '\n';
#endif
}
while (!rowout.empty() && row == -rowout.top()[0]) {
ll ind = rowout.top()[1]; rowout.pop();
segtree.update(clouds[ind][2], clouds[ind][3], -1, ind, 1, 2000, 0);
}
}
for (int i = 1; i <= n; i++) {
cout << 2000 * 2000 - covered + cnt[i] << '\n';
}
}
提出情報
| 提出日時 |
|
| 問題 |
D - Clouds |
| ユーザ |
lumid |
| 言語 |
C++23 (GCC 15.2.0) |
| 得点 |
0 |
| コード長 |
4980 Byte |
| 結果 |
WA |
| 実行時間 |
> 2000 ms |
| メモリ |
692768 KiB |
コンパイルエラー
./Main.cpp: In member function 'void SegmentTree::pushdown(ll, ll, ll)':
./Main.cpp:34:22: warning: unused parameter 's' [-Wunused-parameter]
34 | void pushdown(ll s, ll t, ll p) {
| ~~~^
./Main.cpp:34:28: warning: unused parameter 't' [-Wunused-parameter]
34 | void pushdown(ll s, ll t, ll p) {
| ~~~^
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
0 / 425 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
sample_01.txt |
| All |
sample_01.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45.txt, test_46.txt, test_47.txt, test_48.txt, test_49.txt, test_50.txt, test_51.txt, test_52.txt, test_53.txt, test_54.txt, test_55.txt, test_56.txt, test_57.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| sample_01.txt |
WA |
2 ms |
3956 KiB |
| test_01.txt |
AC |
2 ms |
3928 KiB |
| test_02.txt |
WA |
40 ms |
18436 KiB |
| test_03.txt |
TLE |
> 2000 ms |
539808 KiB |
| test_04.txt |
TLE |
> 2000 ms |
539820 KiB |
| test_05.txt |
TLE |
> 2000 ms |
539780 KiB |
| test_06.txt |
TLE |
> 2000 ms |
349196 KiB |
| test_07.txt |
TLE |
> 2000 ms |
692768 KiB |
| test_08.txt |
WA |
2 ms |
4272 KiB |
| test_09.txt |
WA |
189 ms |
35920 KiB |
| test_10.txt |
WA |
54 ms |
20384 KiB |
| test_11.txt |
WA |
164 ms |
34272 KiB |
| test_12.txt |
WA |
23 ms |
12172 KiB |
| test_13.txt |
WA |
2 ms |
3928 KiB |
| test_14.txt |
WA |
3 ms |
4692 KiB |
| test_15.txt |
WA |
2 ms |
4060 KiB |
| test_16.txt |
WA |
2 ms |
4128 KiB |
| test_17.txt |
WA |
11 ms |
7856 KiB |
| test_18.txt |
WA |
13 ms |
8604 KiB |
| test_19.txt |
WA |
1 ms |
4076 KiB |
| test_20.txt |
WA |
1 ms |
3964 KiB |
| test_21.txt |
WA |
1 ms |
3988 KiB |
| test_22.txt |
WA |
2 ms |
4260 KiB |
| test_23.txt |
WA |
1 ms |
4040 KiB |
| test_24.txt |
WA |
9 ms |
7100 KiB |
| test_25.txt |
WA |
3 ms |
4548 KiB |
| test_26.txt |
WA |
537 ms |
84740 KiB |
| test_27.txt |
WA |
3 ms |
4456 KiB |
| test_28.txt |
WA |
1 ms |
4048 KiB |
| test_29.txt |
WA |
1 ms |
4088 KiB |
| test_30.txt |
WA |
1 ms |
3952 KiB |
| test_31.txt |
TLE |
> 2000 ms |
264364 KiB |
| test_32.txt |
WA |
2 ms |
4128 KiB |
| test_33.txt |
WA |
636 ms |
104076 KiB |
| test_34.txt |
WA |
1256 ms |
131844 KiB |
| test_35.txt |
WA |
141 ms |
37252 KiB |
| test_36.txt |
WA |
1103 ms |
99208 KiB |
| test_37.txt |
WA |
65 ms |
25628 KiB |
| test_38.txt |
WA |
75 ms |
26896 KiB |
| test_39.txt |
WA |
119 ms |
30468 KiB |
| test_40.txt |
WA |
45 ms |
19592 KiB |
| test_41.txt |
WA |
80 ms |
25476 KiB |
| test_42.txt |
WA |
42 ms |
18716 KiB |
| test_43.txt |
WA |
41 ms |
18748 KiB |
| test_44.txt |
WA |
43 ms |
18984 KiB |
| test_45.txt |
WA |
43 ms |
18572 KiB |
| test_46.txt |
WA |
44 ms |
18828 KiB |
| test_47.txt |
WA |
40 ms |
18456 KiB |
| test_48.txt |
WA |
40 ms |
18588 KiB |
| test_49.txt |
WA |
40 ms |
18432 KiB |
| test_50.txt |
WA |
1165 ms |
150016 KiB |
| test_51.txt |
TLE |
> 2000 ms |
226688 KiB |
| test_52.txt |
WA |
333 ms |
68388 KiB |
| test_53.txt |
WA |
455 ms |
79384 KiB |
| test_54.txt |
WA |
950 ms |
101248 KiB |
| test_55.txt |
WA |
1584 ms |
205480 KiB |
| test_56.txt |
TLE |
> 2000 ms |
266240 KiB |
| test_57.txt |
WA |
510 ms |
96564 KiB |