Skip to content
Merged
6 changes: 3 additions & 3 deletions tests/library_checker_aizu_tests/cd_asserts.hpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#pragma once
#include "../../library/trees/centroid_decomp.hpp"
void cd_asserts(vector<vector<int>> adj) {
vector<int> decomp_size(sz(adj), -1);
vector<int> naive_par_decomp(sz(adj), -1);
void cd_asserts(vector<vi> adj) {
vi decomp_size(sz(adj), -1);
vi naive_par_decomp(sz(adj), -1);
vi par = cd(adj, [&](int cent) -> void {
assert(decomp_size[cent] == -1);
auto dfs = [&](auto&& self, int u, int p) -> int {
Expand Down
17 changes: 8 additions & 9 deletions tests/library_checker_aizu_tests/compress_tree_asserts.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,22 @@
#undef RMQ
#undef LCA
#include "../../library/contest/random.hpp"
void compress_tree_asserts(vector<vector<int>> adj,
LCA& lc_rm) {
void compress_tree_asserts(vector<vi> adj, LCA& lc_rm) {
int n = sz(adj);
vector<bool> used(n);
vector<bool> vis(n);
KACTL_LCA kactl_lca(adj);
{
auto [parent, to_node] = lc_rm.compress_tree({});
assert(empty(parent) && empty(to_node));
}
for (int tests = 0; tests < 10; tests++) {
vector<int> subset;
rep(tests, 0, 10) {
vi subset;
{
int subset_size = rnd(1, min(n, 10));
while (subset_size--) {
int u = rnd(0, n - 1);
if (!used[u]) {
used[u] = 1;
if (!vis[u]) {
vis[u] = 1;
subset.push_back(u);
}
}
Expand All @@ -30,13 +29,13 @@ void compress_tree_asserts(vector<vector<int>> adj,
auto [lc_rm_parent, lc_rm_to_node] =
lc_rm.compress_tree(subset);
assert(sz(lc_rm_parent) == sz(kactl_res));
for (int i = 0; i < sz(lc_rm_parent); i++) {
rep(i, 0, sz(lc_rm_parent)) {
assert(lc_rm_to_node[i] == kactl_res[i].second);
assert(lc_rm_parent[i] < i);
if (i > 0)
assert(lc_rm_parent[i] == kactl_res[i].first);
else assert(lc_rm_parent[i] == -1);
}
for (int u : subset) used[u] = 0;
for (int u : subset) vis[u] = 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@
"https://judge.yosupo.jp/problem/gcd_convolution"
#include "../template.hpp"
#include "../../../library/convolution/gcd_convolution.hpp"
istream& operator>>(istream& is, vector<int>& v) {
for (int i = 1; i < sz(v); i++) is >> v[i];
istream& operator>>(istream& is, vi& v) {
rep(i, 1, sz(v)) is >> v[i];
return is;
}
int main() {
cin.tie(0)->sync_with_stdio(0);
int n;
cin >> n;
vector<int> a(n + 1), b(n + 1);
vi a(n + 1), b(n + 1);
cin >> a >> b;
auto c = gcd_convolution(a, b);
for (int i = 1; i <= n; i++) cout << c[i] << ' ';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@
"https://judge.yosupo.jp/problem/lcm_convolution"
#include "../template.hpp"
#include "../../../library/convolution/lcm_convolution.hpp"
istream& operator>>(istream& is, vector<int>& v) {
for (int i = 1; i < sz(v); i++) is >> v[i];
istream& operator>>(istream& is, vi& v) {
rep(i, 1, sz(v)) is >> v[i];
return is;
}
int main() {
cin.tie(0)->sync_with_stdio(0);
int n;
cin >> n;
vector<int> a(n + 1), b(n + 1);
vi a(n + 1), b(n + 1);
cin >> a >> b;
auto c = lcm_convolution(a, b);
for (int i = 1; i <= n; i++) cout << c[i] << ' ';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@
"https://judge.yosupo.jp/problem/min_plus_convolution_convex_arbitrary"
#include "../template.hpp"
#include "../../../library/convolution/min_plus_convolution_convex_and_arbitrary.hpp"
istream& operator>>(istream& is, vector<int>& v) {
istream& operator>>(istream& is, vi& v) {
for (int& e : v) is >> e;
return is;
}
int main() {
cin.tie(0)->sync_with_stdio(0);
int n, m;
cin >> n >> m;
vector<int> convex(n), arbitrary(m);
vi convex(n), arbitrary(m);
cin >> convex >> arbitrary;
auto res = min_plus(convex, arbitrary);
for (int r : res) cout << r << ' ';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
"https://judge.yosupo.jp/problem/bitwise_xor_convolution"
#include "../template.hpp"
#include "../../../library/convolution/xor_convolution.hpp"
istream& operator>>(istream& is, vector<int>& v) {
for (int i = 0; i < sz(v); i++) is >> v[i];
istream& operator>>(istream& is, vi& v) {
rep(i, 0, sz(v)) is >> v[i];
return is;
}
int main() {
Expand All @@ -13,7 +13,7 @@ int main() {
vi a(1 << n), b(1 << n);
cin >> a >> b;
vi c = xor_conv(a, b);
for (int i = 0; i < (1 << n); i++) cout << c[i] << ' ';
rep(i, 0, (1 << n)) cout << c[i] << ' ';
cout << '\n';
return 0;
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,10 @@ int main() {
}
int n, s;
cin >> n >> s;
vector<int> a(n);
for (int i = 0; i < n; i++) cin >> a[i];
vector<int> pref_sum(a);
for (int i = 1; i < n; i++)
pref_sum[i] += pref_sum[i - 1];
vi a(n);
rep(i, 0, n) cin >> a[i];
vi pref_sum(a);
rep(i, 1, n) pref_sum[i] += pref_sum[i - 1];
auto sum = [&](int l, int r) -> int { //[l,r]
int res = pref_sum[r];
if (l) res -= pref_sum[l - 1];
Expand All @@ -25,11 +24,11 @@ int main() {
return 0;
}
int res = n;
for (int i = 0; i < n; i++) {
rep(i, 0, n) {
if (sum(i, n - 1) < s) break;
int curr = *ranges::partition_point(views::iota(i, n),
int cur = *ranges::partition_point(views::iota(i, n),
[&](int x) -> bool { return sum(i, x) < s; });
res = min(res, curr - i + 1);
res = min(res, cur - i + 1);
}
cout << res << '\n';
return 0;
Expand Down
6 changes: 3 additions & 3 deletions tests/library_checker_aizu_tests/data_structures/bit.test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ int main() {
int n, q;
cin >> n >> q;
vector<ll> arr(n);
vector<int> arr_int(n);
for (int i = 0; i < n; i++) {
vi arr_int(n);
rep(i, 0, n) {
cin >> arr[i];
arr_int[i] = int(arr[i]);
}
Expand All @@ -21,7 +21,7 @@ int main() {
vector<ll> suf_sum(n);
partial_sum(rbegin(arr), rend(arr), rbegin(suf_sum));
bit_rupq bit_i(suf_sum);
for (int i = 0; i < n; i++) {
rep(i, 0, n) {
assert(arr[i] == bit.query(i, i + 1));
assert(bit_i.get_index(i) == bit.query(i, n));
assert(bit_i.get_index(i) == suf_sum[i]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ int main() {
int n, q;
cin >> n >> q;
BIT bit(n);
for (int i = 0; i < n; i++) {
rep(i, 0, n) {
int val;
cin >> val;
bit.update(i, val);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ int main() {
string s;
cin >> n >> q >> s;
vector<ll> init(n);
for (int i = 0; i < n; i++) init[i] = s[i] - '0';
rep(i, 0, n) init[i] = s[i] - '0';
BIT bit(init);
while (q--) {
int type, k;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,29 +6,29 @@ int main() {
cin.tie(0)->sync_with_stdio(0);
int n, q;
cin >> n >> q;
vector<int> init(n);
for (int i = 0; i < n; i++) cin >> init[i];
vector<int> compress(init);
vi init(n);
rep(i, 0, n) cin >> init[i];
vi compress(init);
vector<array<int, 2>> query(q);
for (int i = 0; i < q; i++) {
rep(i, 0, q) {
int type, x;
cin >> type >> x;
query[i] = {type, x};
compress.push_back(x);
}
ranges::sort(compress);
compress.erase(unique(all(compress)), end(compress));
BIT bit(ssize(compress));
BIT bit(sz(compress));
auto get_compressed_idx = [&](int val) -> int {
int l = 0, r = ssize(compress);
int l = 0, r = sz(compress);
while (l + 1 < r) {
int m = (l + r) / 2;
if (compress[m] <= val) l = m;
else r = m;
}
return l;
};
for (int i = 0; i < n; i++) {
rep(i, 0, n) {
int val = get_compressed_idx(init[i]);
bit.update(val, 1);
}
Expand All @@ -41,7 +41,7 @@ int main() {
if (bit.query(x, x) == 1) bit.update(x, -1);
} else if (type == 2) {
int res = bit.walk2(x);
if (res == -1 || res == ssize(compress))
if (res == -1 || res == sz(compress))
cout << -1 << '\n';
else cout << compress[res] << '\n';
} else if (type == 3) {
Expand All @@ -55,7 +55,7 @@ int main() {
} else {
x = get_compressed_idx(x);
int res = bit.walk2(bit.query(x - 1) + 1);
if (res == ssize(bit.s)) cout << -1 << '\n';
if (res == sz(bit.s)) cout << -1 << '\n';
else cout << compress[res] << '\n';
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,9 @@ int main() {
int n, q;
string s;
cin >> n >> q >> s;
vector<int> init(n);
vi init(n);
vector<ll> init_ll(n);
for (int i = 0; i < n; i++)
init[i] = init_ll[i] = s[i] - '0';
rep(i, 0, n) init[i] = init_ll[i] = s[i] - '0';
BIT bit(init_ll);
seg_tree st(init);
while (q--) {
Expand Down Expand Up @@ -39,7 +38,7 @@ int main() {
}
int order = bit.query(k);
int need = order + 1;
auto f = [&](int64_t x, int tl, int tr) -> bool {
auto f = [&](ll x, int tl, int tr) -> bool {
assert(tl <= tr);
if (x < need) {
need -= x;
Expand All @@ -50,7 +49,7 @@ int main() {
int res = bit.walk2(order + 1);
assert(res == st.find_first(0, n, f));
assert(res == st.find_first(k, n,
[&](int64_t x, int, int) -> bool {
[&](ll x, int, int) -> bool {
return x > 0;
}));
if (res == n) res = -1;
Expand All @@ -71,7 +70,7 @@ int main() {
}
int order = bit.query(k);
int need = order;
auto f = [&](int64_t x, int tl, int tr) -> bool {
auto f = [&](ll x, int tl, int tr) -> bool {
assert(tl <= tr);
if (x < need) {
need -= x;
Expand All @@ -82,7 +81,7 @@ int main() {
int res = bit.walk2(order);
assert(max(res, 0) == st.find_first(0, n, f));
assert(res == st.find_last(0, k + 1,
[&](int64_t x, int, int) -> bool {
[&](ll x, int, int) -> bool {
return x > 0;
}));
int res_lambda = -1;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ int main() {
cin.tie(0)->sync_with_stdio(0);
int q;
cin >> q;
deq dq(vector<int>(),
deq dq(vi(),
[](int x, int y) -> int { return min(x, y); });
while (q--) {
int type;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ int main() {
cin.tie(0)->sync_with_stdio(0);
int q;
cin >> q;
deq dq(vector<int>(),
deq dq(vi(),
[](int x, int y) -> int { return min(x, y); });
while (q--) {
int type;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ int main() {
const int mod = 998'244'353;
int q;
cin >> q;
using line = pair<int, int>;
using line = pii;
// f1 = begin, f2 = second after begin
// we want op(f1, f2) = the function f2(f1(x))
deq dq(vector<line>(),
Expand Down Expand Up @@ -42,8 +42,8 @@ int main() {
cin >> x;
if (dq.siz() == 0) cout << x << '\n';
else {
line curr = dq.query();
cout << (1LL * curr.first * x + curr.second) % mod
line cur = dq.query();
cout << (1LL * cur.first * x + cur.second) % mod
<< '\n';
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ int main() {
cin.tie(0)->sync_with_stdio(0);
int n, l;
cin >> n >> l;
vector<int> arr(n);
for (int i = 0; i < n; i++) cin >> arr[i];
vector<int> init(begin(arr), begin(arr) + l);
vi arr(n);
rep(i, 0, n) cin >> arr[i];
vi init(begin(arr), begin(arr) + l);
deq dq(init, mn);
cout << dq.query();
for (int i = l; i < n; i++) {
rep(i, l, n) {
dq.push_back(arr[i]);
dq.pop_front();
cout << " " << dq.query();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ int main() {
int n, q;
cin >> n >> q;
vi a(n);
for (int i = 0; i < n; i++) cin >> a[i];
rep(i, 0, n) cin >> a[i];
disjoint_rmq rmq(a,
[](int x, int y) { return min(x, y); });
while (q--) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ int main() {
};
vector<query> queries(q);
vector<pair<ll, ll>> lines;
for (int i = 0; i < q; i++) {
rep(i, 0, q) {
cin >> queries[i].type;
if (queries[i].type == 0) {
cin >> queries[i].a >> queries[i].b;
Expand All @@ -32,14 +32,14 @@ int main() {
(b.first * a.second + b.second) % mod);
});
int l = 0, r = 0; // range [l, r)
for (const auto& curr : queries) {
if (curr.type == 0) r++;
else if (curr.type == 1) l++;
for (const auto& cur : queries) {
if (cur.type == 0) r++;
else if (cur.type == 1) l++;
else {
if (l == r) cout << curr.x << '\n';
if (l == r) cout << cur.x << '\n';
else {
auto [slope, y_int] = rmq.query(l, r - 1);
cout << (slope * curr.x + y_int) % mod << '\n';
cout << (slope * cur.x + y_int) % mod << '\n';
}
}
}
Expand Down
Loading
Loading