Skip to content

Commit 15c399d

Browse files
committed
ROJS 2017
1 parent 30f537f commit 15c399d

File tree

2 files changed

+70
-0
lines changed

2 files changed

+70
-0
lines changed

Romanian/ROJS 17-palindromic_tree.cpp

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/*
2+
ROJS 2017 Palidromic Tree
3+
- The pattern 001011001011... has at most 8 palindromes
4+
*/
5+
6+
#include <bits/stdc++.h>
7+
using namespace std;
8+
9+
int main() {
10+
int n;
11+
cin >> n;
12+
cout << min(n, 8) << '\n';
13+
for (int i = 0; i < n; i++) cout << "001011"[i % 6];
14+
return 0;
15+
}

Romanian/ROJS 17-remove_update.cpp

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/*
2+
ROJS 2017 Remove Update
3+
- Apply all updates using a lazy segtree, and then try undo each one
4+
and querying the range max
5+
- Complexity: O(Q log N)
6+
*/
7+
8+
#include <bits/stdc++.h>
9+
typedef long long ll;
10+
using namespace std;
11+
12+
struct Query { int a, b, v; } queries[100001];
13+
14+
int n, q, segtree[400001], lazy[400001];
15+
16+
void push_lazy(int node, int l, int r) {
17+
segtree[node] += lazy[node];
18+
if (l != r) {
19+
lazy[node * 2] += lazy[node];
20+
lazy[node * 2 + 1] += lazy[node];
21+
}
22+
lazy[node] = 0;
23+
}
24+
25+
void update(int a, int b, int v, int node = 1, int l = 1, int r = n) {
26+
push_lazy(node, l, r);
27+
if (l > b || r < a) return;
28+
if (l >= a && r <= b) {
29+
lazy[node] = v;
30+
push_lazy(node, l, r);
31+
} else {
32+
int mid = (l + r) / 2;
33+
update(a, b, v, node * 2, l, mid);
34+
update(a, b, v, node * 2 + 1, mid + 1, r);
35+
segtree[node] = max(segtree[node * 2], segtree[node * 2 + 1]);
36+
}
37+
}
38+
39+
int main() {
40+
ios_base::sync_with_stdio(0);
41+
cin.tie(0);
42+
cin >> n >> q;
43+
for (int i = 0; i < q; i++) {
44+
cin >> queries[i].a >> queries[i].b >> queries[i].v;
45+
update(queries[i].a, queries[i].b, queries[i].v);
46+
}
47+
int ans = INT_MAX;
48+
for (int i = 0; i < q; i++) {
49+
update(queries[i].a, queries[i].b, -queries[i].v);
50+
ans = min(ans, segtree[1]);
51+
update(queries[i].a, queries[i].b, queries[i].v);
52+
}
53+
cout << ans;
54+
return 0;
55+
}

0 commit comments

Comments
 (0)