# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
737937 |
2023-05-08T02:45:54 Z |
resting |
Fish 2 (JOI22_fish2) |
C++17 |
|
4000 ms |
111072 KB |
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mx = 1e5 + 5;
const int inf = 1e15;
vector<pair<int, int>> res;
struct segtree {
int l, r, v, m;
segtree* lc, * rc;
segtree* getmem();
set<pair<int, int>> lm, rm;
segtree() : segtree(-1, -1) {};
segtree(int l, int r) : l(l), r(r) {
m = (l + r) / 2;
if (l == r)return;
lc = getmem(); *lc = segtree(l, m);
rc = getmem(); *rc = segtree(m + 1, r);
}
void del(int ql, int qr) {
if (qr < m) { lc->del(ql, qr); return; }
if (ql > m) { rc->del(ql, qr); return; }
lm.erase({ ql, qr });
rm.erase({ qr, ql });
}
void add(int ql, int qr) {
if (qr < m) { lc->add(ql, qr); return; }
if (ql > m) { rc->add(ql, qr); return; }
lm.insert({ ql, qr });
rm.insert({ qr, ql });
}
void q(int qi) {
if (l == r)return;
if (qi <= m)lc->q(qi);
else rc->q(qi);
if (qi <= m) {
for (auto t = lm.begin(); t != lm.end() && t->first <= qi; t++)
res.push_back(*t);
} else {
for (auto t = rm.rbegin(); t != rm.rend() && t->first >= qi; t++)
res.push_back({ t->second, t->first });
}
}
};
segtree mem[mx * 4];
int memsz = 0;
segtree* segtree::getmem() { return &mem[memsz++]; }
struct segtree2 {
int l, r, cnt1 = 0, cnt2 = 0, lz = 0;
segtree2* lc, * rc;
segtree2* getmem();
segtree2() : segtree2(-1, -1) {};
segtree2(int l, int r) : l(l), r(r) {
if (l == r)return;
int m = (l + r) / 2;
lc = getmem(); *lc = segtree2(l, m);
rc = getmem(); *rc = segtree2(m + 1, r);
}
void fix() {
if (l == r) {
cnt1 = cnt2 = 0;
if (lz == 1) cnt1 = 1;
if (lz > 1) cnt2 = 1;
return;
}
if (lz == 0) {
cnt1 = lc->cnt1 + rc->cnt1;
cnt2 = lc->cnt2 + rc->cnt2;
} else if (lz == 1) {
cnt2 = lc->cnt1 + rc->cnt1 + lc->cnt2 + rc->cnt2;
cnt1 = (r - l + 1) - cnt2;
} else {
cnt1 = 0;
cnt2 = (r - l + 1);
}
}
void upd(int ql, int qr, int qv) {
if (l > qr || r < ql) return;
if (l >= ql && r <= qr) {
lz += qv; fix();
return;
}
lc->upd(ql, qr, qv);
rc->upd(ql, qr, qv);
fix();
}
int q(int ql, int qr, int qlz = 0) {
if (l > qr || r < ql) return 0;
lz += qlz; fix();
int res = 0;
if (l >= ql && r <= qr) {
res = cnt2;
} else {
res = lc->q(ql, qr, lz) + rc->q(ql, qr, lz);
}
lz -= qlz; fix();
return res;
}
};
segtree2 mem2[mx * 4];
int memsz2 = 0;
segtree2* segtree2::getmem() { return &mem2[memsz2++]; }
struct segtree3 {
int l, r, mx = 0, sm = 0;
segtree3* lc, * rc;
segtree3* getmem();
segtree3() : segtree3(-1, -1) {};
segtree3(int l, int r) : l(l), r(r) {
if (l == r)return;
int m = (l + r) / 2;
lc = getmem(); *lc = segtree3(l, m);
rc = getmem(); *rc = segtree3(m + 1, r);
}
void fix() {
if (l == r) return;
mx = max(lc->mx, rc->mx);
sm = lc->sm + rc->sm;
}
void upd(int qi, int qv) {
if (l > qi || r < qi) return;
if (l == r) {
mx = qv; sm = qv;return;
}
lc->upd(qi, qv); rc->upd(qi, qv);
fix();
}
int walkl(int ql, int qv) {
if (r < ql) return -1;
if (mx <= qv) return -1;
if (l == r) return l;
int v = lc->walkl(ql, qv);
return v == -1 ? rc->walkl(ql, qv) : v;
}
int walkr(int qr, int qv) {
if (l > qr) return -1;
if (mx <= qv) return -1;
if (l == r) return l;
int v = rc->walkr(qr, qv);
return v == -1 ? lc->walkr(qr, qv) : v;
}
int qsum(int ql, int qr) {
if (l > qr || r < ql) return 0;
if (l >= ql && r <= qr) return sm;
return lc->qsum(ql, qr) + rc->qsum(ql, qr);
}
};
segtree3 mem3[mx * 4];
int memsz3 = 0;
segtree3* segtree3::getmem() { return &mem3[memsz++]; }
segtree ac; segtree2 ac2; segtree3 ac3; vector<int> ac4;
int n;
void redo(int i) {
//cout << "REDO " << i << endl;
res.clear(); ac.q(i);
for (auto& x : res) {
auto [l, r] = x;
//cout << "DEL " << l << " " << r << endl;
ac.del(l, r);
ac2.upd(l, r, -1);
}
//walking time
int l = i, r = i;
while (1) {
int t = ac3.qsum(l, r);
int wr = ac3.walkl(r + 1, t);
int wl = ac3.walkr(l - 1, t);
//cout << l << "," << r << "," << wl << "," << wr << endl;
if (wl == -1 || wr == -1) break;
t = ac3.qsum(wl + 1, wr - 1);
if (ac4[wl] > t && ac4[wr] > t) {
//cout << "ADD " << wl + 1 << " " << wr - 1 << " " << t << " " << ac4[wl] << " " << ac4[wr] << endl;
ac.add(wl + 1, wr - 1);
ac2.upd(wl + 1, wr - 1, 1);
}
l = wl + 1, r = wr - 1;
if (ac4[wl] > ac4[wr]) r++;
else l--;
}
}
void upd(int i, int v) {
ac4[i] = v; ac3.upd(i, v);
redo(i);
if (i < n + 1)redo(i + 1);
if (i)redo(i - 1);
}
void solve() {
cin >> n;
vector<int> a(n + 1, 0); for (int i = 1; i <= n; i++) cin >> a[i];
ac = segtree(0, n + 1); ac2 = segtree2(0, n + 1); ac3 = segtree3(0, n + 1); ac4 = vector<int>(n + 2, 0);
for (int i = 0; i <= n + 1; i++) upd(i, a[i]);
int q; cin >> q;
while (q--) {
int t; cin >> t;
if (t == 1) {
int x, y; cin >> x >> y; a[x] = y;
upd(x, y);
} else {
int l, r; cin >> l >> r;
upd(l - 1, inf); upd(r + 1, inf);
cout << (r - l + 1 - ac2.q(l, r)) << endl;
upd(l - 1, a[l - 1]); upd(r + 1, a[r + 1]);
}
}
}
int32_t main() {
cin.tie(0)->sync_with_stdio(0);
int t = 1;
// cin >> t;
while (t--)
solve();
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
40 ms |
97376 KB |
Output is correct |
2 |
Correct |
44 ms |
97312 KB |
Output is correct |
3 |
Correct |
43 ms |
97288 KB |
Output is correct |
4 |
Correct |
48 ms |
97364 KB |
Output is correct |
5 |
Correct |
48 ms |
97364 KB |
Output is correct |
6 |
Correct |
63 ms |
97312 KB |
Output is correct |
7 |
Correct |
50 ms |
97412 KB |
Output is correct |
8 |
Correct |
76 ms |
97416 KB |
Output is correct |
9 |
Correct |
66 ms |
97348 KB |
Output is correct |
10 |
Correct |
45 ms |
97356 KB |
Output is correct |
11 |
Correct |
48 ms |
97400 KB |
Output is correct |
12 |
Correct |
46 ms |
97420 KB |
Output is correct |
13 |
Correct |
61 ms |
97412 KB |
Output is correct |
14 |
Correct |
46 ms |
97376 KB |
Output is correct |
15 |
Correct |
58 ms |
97320 KB |
Output is correct |
16 |
Correct |
54 ms |
97404 KB |
Output is correct |
17 |
Correct |
48 ms |
97352 KB |
Output is correct |
18 |
Correct |
56 ms |
97424 KB |
Output is correct |
19 |
Correct |
48 ms |
97376 KB |
Output is correct |
20 |
Correct |
50 ms |
97348 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
40 ms |
97328 KB |
Output is correct |
2 |
Correct |
258 ms |
109688 KB |
Output is correct |
3 |
Correct |
239 ms |
108408 KB |
Output is correct |
4 |
Correct |
244 ms |
109576 KB |
Output is correct |
5 |
Correct |
242 ms |
108600 KB |
Output is correct |
6 |
Correct |
216 ms |
104404 KB |
Output is correct |
7 |
Correct |
237 ms |
102068 KB |
Output is correct |
8 |
Correct |
213 ms |
104504 KB |
Output is correct |
9 |
Correct |
225 ms |
102116 KB |
Output is correct |
10 |
Correct |
225 ms |
103884 KB |
Output is correct |
11 |
Correct |
217 ms |
103592 KB |
Output is correct |
12 |
Correct |
200 ms |
103828 KB |
Output is correct |
13 |
Correct |
215 ms |
103824 KB |
Output is correct |
14 |
Correct |
245 ms |
107392 KB |
Output is correct |
15 |
Correct |
240 ms |
107220 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
40 ms |
97376 KB |
Output is correct |
2 |
Correct |
44 ms |
97312 KB |
Output is correct |
3 |
Correct |
43 ms |
97288 KB |
Output is correct |
4 |
Correct |
48 ms |
97364 KB |
Output is correct |
5 |
Correct |
48 ms |
97364 KB |
Output is correct |
6 |
Correct |
63 ms |
97312 KB |
Output is correct |
7 |
Correct |
50 ms |
97412 KB |
Output is correct |
8 |
Correct |
76 ms |
97416 KB |
Output is correct |
9 |
Correct |
66 ms |
97348 KB |
Output is correct |
10 |
Correct |
45 ms |
97356 KB |
Output is correct |
11 |
Correct |
48 ms |
97400 KB |
Output is correct |
12 |
Correct |
46 ms |
97420 KB |
Output is correct |
13 |
Correct |
61 ms |
97412 KB |
Output is correct |
14 |
Correct |
46 ms |
97376 KB |
Output is correct |
15 |
Correct |
58 ms |
97320 KB |
Output is correct |
16 |
Correct |
54 ms |
97404 KB |
Output is correct |
17 |
Correct |
48 ms |
97352 KB |
Output is correct |
18 |
Correct |
56 ms |
97424 KB |
Output is correct |
19 |
Correct |
48 ms |
97376 KB |
Output is correct |
20 |
Correct |
50 ms |
97348 KB |
Output is correct |
21 |
Correct |
40 ms |
97328 KB |
Output is correct |
22 |
Correct |
258 ms |
109688 KB |
Output is correct |
23 |
Correct |
239 ms |
108408 KB |
Output is correct |
24 |
Correct |
244 ms |
109576 KB |
Output is correct |
25 |
Correct |
242 ms |
108600 KB |
Output is correct |
26 |
Correct |
216 ms |
104404 KB |
Output is correct |
27 |
Correct |
237 ms |
102068 KB |
Output is correct |
28 |
Correct |
213 ms |
104504 KB |
Output is correct |
29 |
Correct |
225 ms |
102116 KB |
Output is correct |
30 |
Correct |
225 ms |
103884 KB |
Output is correct |
31 |
Correct |
217 ms |
103592 KB |
Output is correct |
32 |
Correct |
200 ms |
103828 KB |
Output is correct |
33 |
Correct |
215 ms |
103824 KB |
Output is correct |
34 |
Correct |
245 ms |
107392 KB |
Output is correct |
35 |
Correct |
240 ms |
107220 KB |
Output is correct |
36 |
Correct |
355 ms |
111072 KB |
Output is correct |
37 |
Correct |
405 ms |
108792 KB |
Output is correct |
38 |
Correct |
408 ms |
107536 KB |
Output is correct |
39 |
Correct |
347 ms |
110980 KB |
Output is correct |
40 |
Correct |
399 ms |
107388 KB |
Output is correct |
41 |
Correct |
274 ms |
104320 KB |
Output is correct |
42 |
Correct |
260 ms |
104368 KB |
Output is correct |
43 |
Correct |
315 ms |
102184 KB |
Output is correct |
44 |
Correct |
330 ms |
102108 KB |
Output is correct |
45 |
Correct |
313 ms |
104900 KB |
Output is correct |
46 |
Correct |
307 ms |
104072 KB |
Output is correct |
47 |
Correct |
331 ms |
101412 KB |
Output is correct |
48 |
Correct |
269 ms |
104052 KB |
Output is correct |
49 |
Correct |
293 ms |
103924 KB |
Output is correct |
50 |
Correct |
259 ms |
107416 KB |
Output is correct |
51 |
Correct |
299 ms |
107216 KB |
Output is correct |
52 |
Correct |
292 ms |
107340 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
40 ms |
97328 KB |
Output is correct |
2 |
Correct |
258 ms |
109688 KB |
Output is correct |
3 |
Correct |
239 ms |
108408 KB |
Output is correct |
4 |
Correct |
244 ms |
109576 KB |
Output is correct |
5 |
Correct |
242 ms |
108600 KB |
Output is correct |
6 |
Correct |
216 ms |
104404 KB |
Output is correct |
7 |
Correct |
237 ms |
102068 KB |
Output is correct |
8 |
Correct |
213 ms |
104504 KB |
Output is correct |
9 |
Correct |
225 ms |
102116 KB |
Output is correct |
10 |
Correct |
225 ms |
103884 KB |
Output is correct |
11 |
Correct |
217 ms |
103592 KB |
Output is correct |
12 |
Correct |
200 ms |
103828 KB |
Output is correct |
13 |
Correct |
215 ms |
103824 KB |
Output is correct |
14 |
Correct |
245 ms |
107392 KB |
Output is correct |
15 |
Correct |
240 ms |
107220 KB |
Output is correct |
16 |
Correct |
42 ms |
97356 KB |
Output is correct |
17 |
Execution timed out |
4054 ms |
108772 KB |
Time limit exceeded |
18 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
40 ms |
97328 KB |
Output is correct |
2 |
Correct |
258 ms |
109688 KB |
Output is correct |
3 |
Correct |
239 ms |
108408 KB |
Output is correct |
4 |
Correct |
244 ms |
109576 KB |
Output is correct |
5 |
Correct |
242 ms |
108600 KB |
Output is correct |
6 |
Correct |
216 ms |
104404 KB |
Output is correct |
7 |
Correct |
237 ms |
102068 KB |
Output is correct |
8 |
Correct |
213 ms |
104504 KB |
Output is correct |
9 |
Correct |
225 ms |
102116 KB |
Output is correct |
10 |
Correct |
225 ms |
103884 KB |
Output is correct |
11 |
Correct |
217 ms |
103592 KB |
Output is correct |
12 |
Correct |
200 ms |
103828 KB |
Output is correct |
13 |
Correct |
215 ms |
103824 KB |
Output is correct |
14 |
Correct |
245 ms |
107392 KB |
Output is correct |
15 |
Correct |
240 ms |
107220 KB |
Output is correct |
16 |
Correct |
43 ms |
97360 KB |
Output is correct |
17 |
Correct |
1741 ms |
109832 KB |
Output is correct |
18 |
Correct |
1723 ms |
110216 KB |
Output is correct |
19 |
Correct |
2712 ms |
108964 KB |
Output is correct |
20 |
Correct |
1775 ms |
110652 KB |
Output is correct |
21 |
Correct |
2936 ms |
109960 KB |
Output is correct |
22 |
Correct |
1645 ms |
110284 KB |
Output is correct |
23 |
Correct |
2544 ms |
109336 KB |
Output is correct |
24 |
Correct |
1749 ms |
110168 KB |
Output is correct |
25 |
Correct |
2551 ms |
108984 KB |
Output is correct |
26 |
Correct |
974 ms |
104996 KB |
Output is correct |
27 |
Correct |
976 ms |
104804 KB |
Output is correct |
28 |
Correct |
1394 ms |
107424 KB |
Output is correct |
29 |
Correct |
977 ms |
104956 KB |
Output is correct |
30 |
Correct |
961 ms |
104680 KB |
Output is correct |
31 |
Correct |
1432 ms |
107044 KB |
Output is correct |
32 |
Correct |
1558 ms |
107944 KB |
Output is correct |
33 |
Correct |
1193 ms |
103920 KB |
Output is correct |
34 |
Correct |
1449 ms |
109260 KB |
Output is correct |
35 |
Correct |
1296 ms |
104388 KB |
Output is correct |
36 |
Correct |
1540 ms |
107592 KB |
Output is correct |
37 |
Correct |
1677 ms |
107092 KB |
Output is correct |
38 |
Correct |
1551 ms |
106696 KB |
Output is correct |
39 |
Correct |
1172 ms |
108068 KB |
Output is correct |
40 |
Correct |
1102 ms |
107920 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
40 ms |
97376 KB |
Output is correct |
2 |
Correct |
44 ms |
97312 KB |
Output is correct |
3 |
Correct |
43 ms |
97288 KB |
Output is correct |
4 |
Correct |
48 ms |
97364 KB |
Output is correct |
5 |
Correct |
48 ms |
97364 KB |
Output is correct |
6 |
Correct |
63 ms |
97312 KB |
Output is correct |
7 |
Correct |
50 ms |
97412 KB |
Output is correct |
8 |
Correct |
76 ms |
97416 KB |
Output is correct |
9 |
Correct |
66 ms |
97348 KB |
Output is correct |
10 |
Correct |
45 ms |
97356 KB |
Output is correct |
11 |
Correct |
48 ms |
97400 KB |
Output is correct |
12 |
Correct |
46 ms |
97420 KB |
Output is correct |
13 |
Correct |
61 ms |
97412 KB |
Output is correct |
14 |
Correct |
46 ms |
97376 KB |
Output is correct |
15 |
Correct |
58 ms |
97320 KB |
Output is correct |
16 |
Correct |
54 ms |
97404 KB |
Output is correct |
17 |
Correct |
48 ms |
97352 KB |
Output is correct |
18 |
Correct |
56 ms |
97424 KB |
Output is correct |
19 |
Correct |
48 ms |
97376 KB |
Output is correct |
20 |
Correct |
50 ms |
97348 KB |
Output is correct |
21 |
Correct |
40 ms |
97328 KB |
Output is correct |
22 |
Correct |
258 ms |
109688 KB |
Output is correct |
23 |
Correct |
239 ms |
108408 KB |
Output is correct |
24 |
Correct |
244 ms |
109576 KB |
Output is correct |
25 |
Correct |
242 ms |
108600 KB |
Output is correct |
26 |
Correct |
216 ms |
104404 KB |
Output is correct |
27 |
Correct |
237 ms |
102068 KB |
Output is correct |
28 |
Correct |
213 ms |
104504 KB |
Output is correct |
29 |
Correct |
225 ms |
102116 KB |
Output is correct |
30 |
Correct |
225 ms |
103884 KB |
Output is correct |
31 |
Correct |
217 ms |
103592 KB |
Output is correct |
32 |
Correct |
200 ms |
103828 KB |
Output is correct |
33 |
Correct |
215 ms |
103824 KB |
Output is correct |
34 |
Correct |
245 ms |
107392 KB |
Output is correct |
35 |
Correct |
240 ms |
107220 KB |
Output is correct |
36 |
Correct |
355 ms |
111072 KB |
Output is correct |
37 |
Correct |
405 ms |
108792 KB |
Output is correct |
38 |
Correct |
408 ms |
107536 KB |
Output is correct |
39 |
Correct |
347 ms |
110980 KB |
Output is correct |
40 |
Correct |
399 ms |
107388 KB |
Output is correct |
41 |
Correct |
274 ms |
104320 KB |
Output is correct |
42 |
Correct |
260 ms |
104368 KB |
Output is correct |
43 |
Correct |
315 ms |
102184 KB |
Output is correct |
44 |
Correct |
330 ms |
102108 KB |
Output is correct |
45 |
Correct |
313 ms |
104900 KB |
Output is correct |
46 |
Correct |
307 ms |
104072 KB |
Output is correct |
47 |
Correct |
331 ms |
101412 KB |
Output is correct |
48 |
Correct |
269 ms |
104052 KB |
Output is correct |
49 |
Correct |
293 ms |
103924 KB |
Output is correct |
50 |
Correct |
259 ms |
107416 KB |
Output is correct |
51 |
Correct |
299 ms |
107216 KB |
Output is correct |
52 |
Correct |
292 ms |
107340 KB |
Output is correct |
53 |
Correct |
42 ms |
97356 KB |
Output is correct |
54 |
Execution timed out |
4054 ms |
108772 KB |
Time limit exceeded |
55 |
Halted |
0 ms |
0 KB |
- |