Skip to content

Commit b9b1dbc

Browse files
committed
changes
1 parent d6aac9b commit b9b1dbc

File tree

8 files changed

+44
-40
lines changed

8 files changed

+44
-40
lines changed

library/graphs/dijkstra.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
//! d[v] = min dist from source->..->v
77
//! @time O(n + (m log m))
88
//! @space O(n + m)
9-
template <class G> vector<ll> dijkstra(const G& adj, int s) {
9+
template<class G>
10+
vector<ll> dijkstra(const G& adj, int s) {
1011
using p = pair<ll, int>;
1112
priority_queue<p, vector<p>, greater<>> pq;
1213
pq.emplace(0, s);

library/graphs/hopcroft_karp.hpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,12 @@
1313
//! mvc_r[r] is 1 if r in Min Vertex Cover
1414
//! @time O(n + m * sqrt(n)) n = lsz + rsz
1515
//! @space O(n)
16-
template <class G> struct hopcroft_karp {
16+
template<class G> struct hopcroft_karp {
1717
int m_sz = 0;
1818
vi to_r, to_l;
1919
vector<bool> mvc_l, mvc_r;
20-
hopcroft_karp(const G& adj, int rsz) : to_r(sz(adj), -1), to_l(rsz, -1) {
20+
hopcroft_karp(const G& adj, int rsz):
21+
to_r(sz(adj), -1), to_l(rsz, -1) {
2122
int lsz = sz(adj);
2223
while (1) {
2324
queue<int> q;
@@ -46,7 +47,7 @@ template <class G> struct hopcroft_karp {
4647
for (int u : adj[v]) {
4748
int w = to_l[u];
4849
if (w == -1 ||
49-
(level[v] + 1 == level[w] && self(self, w))) {
50+
(level[v] + 1 == level[w] && self(self, w))) {
5051
to_r[v] = u;
5152
to_l[u] = v;
5253
return 1;
@@ -56,7 +57,7 @@ template <class G> struct hopcroft_karp {
5657
return 0;
5758
};
5859
rep(i, 0, lsz) m_sz +=
59-
(to_r[i] == -1 && dfs(dfs, i));
60+
(to_r[i] == -1 && dfs(dfs, i));
6061
}
6162
}
6263
};

library/strings/kmp.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,17 @@
55
//! KMP kmp(t);
66
//! auto match = kmp.find_str(s);
77
//! vi s_vec,t_vec;
8-
//! KMP kmp2(t_vec);
9-
//! auto match2 = kmp2.find_str(s_vec);
8+
//! KMP kmp1(t_vec);
9+
//! auto match2 = kmp1.find_str(s_vec);
1010
//! @endcode
1111
//! if match[i] == 1 then s[i,sz(t)) == t
1212
//! @time O(|s| + |t|)
1313
//! @space O(|s| + |t|)
1414
// NOLINTNEXTLINE(readability-identifier-naming)
15-
template <class T> struct KMP {
15+
template<class T> struct KMP {
1616
T t;
1717
vi pi;
18-
KMP(const T& t) : t(t), pi(prefix_function(t)) {}
18+
KMP(const T& t): t(t), pi(prefix_function(t)) {}
1919
vector<bool> find_str(const T& s) {
2020
vector<bool> is_m(sz(s));
2121
int j = 0;

library/strings/longest_common_subsequence/lcs_queries.hpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,16 @@
11
#pragma once
22
#include "../../data_structures/bit.hpp"
33
#include "lcs_dp.hpp"
4-
//! Given tuples (s_r, t_le, t_ri), find:
5-
//! size(LCS(s[0,s_r), t[t_le,t_ri)))
4+
//! @code
5+
//! string s,t;
6+
//! vi lcs_len = lcs_queries(s, t, queries);
7+
//! vi s_vec,t_vec;
8+
//! vi lcs_len1 = lcs_queries(s_vec, t_vec, queries);
9+
//! @endcode
10+
//! lcs_len[i] = size(LCS(
11+
//! s[0,queries[i][0]),
12+
//! t[queries[i][1],queries[i][2])
13+
//! ))
614
//! @time O(n*m*log(m) + q*log(m) + q*log(q))
715
//! @space O(n + m + q)
816
template<class T>

library/strings/manacher/manacher.hpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
#pragma once
22
//! https://codeforces.com/blog/entry/12143#comment-324162
33
//! @code
4-
//! string s6;
5-
//! auto man = manacher(s6);
6-
//! vi s_vec6;
7-
//! auto man2 = manacher(s_vec6);
4+
//! string s;
5+
//! auto man = manacher(s);
6+
//! vi s_vec;
7+
//! auto man1 = manacher(s_vec);
88
//! @endcode
99
//!
1010
//! man[center] = index of start of longest
@@ -16,16 +16,16 @@
1616
//!
1717
//! @time O(n)
1818
//! @space O(n)
19-
template <class T> vi manacher(const T& s) {
19+
template<class T> vi manacher(const T& s) {
2020
int n = sz(s), p = 0;
21-
vi man(max(0, 2 * n - 1));
21+
vi man(2 * n - 1);
2222
rep(i, 0, 2 * n - 1) {
2323
int r = i <= 2 * (p - man[p])
24-
? p - max(man[2 * p - i], man[p])
25-
: i / 2;
24+
? p - max(man[2 * p - i], man[p])
25+
: i / 2;
2626
man[i] = i - r;
2727
while (
28-
man[i] > 0 && r + 1 < n && s[man[i] - 1] == s[r + 1])
28+
man[i] > 0 && r + 1 < n && s[man[i] - 1] == s[r + 1])
2929
man[i]--, r++, p = i;
3030
}
3131
return man;

library/strings/suffix_array/suffix_array.hpp

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,16 @@
2525
//! lcp = {1, 3, 0, 0, 2}
2626
//!
2727
//! @code
28-
//! string s1;
29-
//! auto [sa, sa_inv, lcp] = get_sa(s1, 256);
30-
//! vi s_vec1;
31-
//! auto [sa1, sa_inv1, lcp1] = get_sa(s_vec1, 100'001);
28+
//! // requires 0<=s[i]<max_num
29+
//! string s;
30+
//! auto [sa, sa_inv, lcp] = get_sa(s, 256);
31+
//! vi s_vec;
32+
//! auto [sa1, sa_inv1, lcp1] = get_sa(s_vec, 100'001);
3233
//! @endcode
3334
//!
34-
//! requires 0<=s[i]<max_num
35-
//!
3635
//! @time O(nlogn + max_num)
3736
//! @space O(n + max_num)
38-
template <class T>
37+
template<class T>
3938
array<vi, 3> get_sa(const T& s, int max_num) {
4039
int n = sz(s);
4140
vi sa(n), sa_inv(all(s)), lcp(n - 1);
@@ -44,7 +43,7 @@ array<vi, 3> get_sa(const T& s, int max_num) {
4443
vi y(sa_inv), freq(max_num);
4544
iota(all(sa_inv), n - i);
4645
ranges::copy_if(sa, begin(sa_inv) + i,
47-
[&](int& x) { return (x -= i) >= 0; });
46+
[&](int& x) { return (x -= i) >= 0; });
4847
for (int x : y) freq[x]++;
4948
partial_sum(all(freq), begin(freq));
5049
for (int x : sa_inv | views::reverse)

library/strings/suffix_array/suffix_array_query.hpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,17 @@
88
//! sa_query saq(s, sa, sa_inv, lcp);
99
//! vi s_vec;
1010
//! auto [sa1, sa_inv1, lcp1] = sa_short(s_vec, 100'001);
11-
//! sa_query saq(s_vec, sa1, sa_inv1, lcp1);
11+
//! sa_query saq1(s_vec, sa1, sa_inv1, lcp1);
1212
//! @endcode
13-
template <class T> struct sa_query {
13+
template<class T> struct sa_query {
1414
int n;
1515
T s;
1616
vi sa, sa_inv, lcp;
1717
RMQ<int, function<int(int, int)>> rmq;
1818
sa_query(const T& s, const vi& sa, const vi& sa_inv,
19-
const vi& lcp) : n(sz(s)), s(s), sa(sa), sa_inv(sa_inv), lcp(lcp), rmq(lcp, ranges::min) {}
19+
const vi& lcp):
20+
n(sz(s)), s(s), sa(sa), sa_inv(sa_inv), lcp(lcp),
21+
rmq(lcp, ranges::min) {}
2022
//! returns max integer k such that
2123
//! s.substr(i1, k) == s.substr(i2, k)
2224
//! @time O(1)

library/strings/suffix_array/suffix_array_short.hpp

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,15 @@
22
//! https://github.com/atcoder/ac-library/blob/master/atcoder/string.hpp
33
//! @code
44
//! // requires s[i]>=0
5-
<<<<<<< HEAD
6-
//! string s2;
7-
//! auto [sa2, sa_inv2, lcp2] = sa_short(s2);
8-
//! vi s_vec2;
9-
//! auto [sa3, sa_inv3, lcp3] = sa_short(s_vec2);
10-
=======
115
//! string s;
126
//! auto [sa, sa_inv, lcp] = sa_short(s);
137
//! vi s_vec;
148
//! auto [sa1, sa_inv1, lcp1] = sa_short(s_vec);
15-
>>>>>>> dev
169
//! @endcode
1710
//! runs in ~1.5s for 5e5
1811
//! @time O(n * log^2(n))
1912
//! @space O(n)
20-
template <class T> array<vi, 3> sa_short(const T& s) {
13+
template<class T> array<vi, 3> sa_short(const T& s) {
2114
int n = sz(s);
2215
vi sa(n), sa_inv(all(s)), lcp(n - 1);
2316
iota(all(sa), 0);
@@ -29,7 +22,7 @@ template <class T> array<vi, 3> sa_short(const T& s) {
2922
ranges::sort(sa, {}, proj);
3023
sa_inv[sa[0]] = 0;
3124
rep(i, 1, n) sa_inv[sa[i]] =
32-
sa_inv[sa[i - 1]] + (proj(sa[i - 1]) != proj(sa[i]));
25+
sa_inv[sa[i - 1]] + (proj(sa[i - 1]) != proj(sa[i]));
3326
}
3427
int sz = 0;
3528
rep(i, 0, n) {

0 commit comments

Comments
 (0)