Skip to content

Commit 488c170

Browse files
committed
First update of algorithms
1 parent ce00754 commit 488c170

7 files changed

+209
-289
lines changed

BFS.cpp

+16-32
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,23 @@
1-
#include<bits/stdc++.h>
1+
#include <bits/stdc++.h>
2+
23
using namespace std;
3-
#define FOR(i,a,b) for(int i = (a); i <= (b); ++i)
4-
#define FORD(i,a,b) for(int i = (b); i >= (a); --i)
5-
#define TRAV(x,T) for(auto& x: (T))
6-
#define ALL(T) T.begin(), T.end()
7-
#define TAB(T,a,b) (T)+a, (T)+((b)+1)
8-
#define VAR(x) #x<<" = "<<x<<" "
9-
#define sz(x) (int)(x).size()
10-
#define nwd __gcd
11-
#define pb push_back
12-
#define st first
13-
#define nd second
14-
#define lc (v<<1)
15-
#define rc (v<<1|1)
16-
typedef long long ll;
17-
typedef long double ld;
18-
typedef pair<int, int> pii;
19-
typedef pair<ll, ll> pll;
20-
typedef vector<int> vi;
21-
#define deb if(0)
4+
225
const int N = 1e6, NT = N + 2;
236

24-
vi V[NT];
7+
vector<int> V[NT];
258
bitset<NT> Vis;
269
queue<int> Q;
10+
2711
void bfs(int v) {
28-
Q.push(v);
29-
while(!Q.empty()) {
30-
v = Q.front();
31-
Q.pop();
32-
Vis[v] = true;
33-
TRAV(u, V[v]) {
34-
if(!Vis[u]) {
35-
Q.push(u);
36-
}
37-
}
12+
Q.push(v);
13+
while (!Q.empty()) {
14+
v = Q.front();
15+
Q.pop();
16+
Vis[v] = true;
17+
for (const auto &u : V[v]) {
18+
if (!Vis[u]) {
19+
Q.push(u);
20+
}
3821
}
39-
}
22+
}
23+
}

BinSearch.cpp

+27-38
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,38 @@
1-
#include<bits/stdc++.h>
1+
#include <bits/stdc++.h>
2+
23
using namespace std;
3-
#define FOR(i,a,b) for(int i = (a); i <= (b); ++i)
4-
#define FORD(i,a,b) for(int i = (a); i >= (b); --i)
5-
#define TRAV(x,T) for(auto& (x): (T))
6-
#define ALL(x) x.begin(), x.end()
7-
#define TAB(x,n) (x)+1, (x)+((n)+1)
8-
#define sz(x) (int)(x).size()
9-
#define pb push_back
10-
#define pf push_front
11-
#define st first
12-
#define nd second
13-
typedef long long ll;
14-
typedef long double ld;
15-
typedef pair<int, int> pii;
16-
typedef pair<ll, ll> pll;
17-
typedef vector<int> vi;
18-
const int N = 1e6 + 2;
194

205
bool check(int x) {
21-
return 1 == 1; // warunek
6+
return 1 == 1; // warunek
227
}
238

249
int search_first(int l, int r) {
25-
int mid;
26-
while(l < r) {
27-
mid = (l + r) / 2;
28-
if(check(mid)) r = mid;
29-
else l = mid + 1;
30-
}
31-
return l;
10+
int mid;
11+
while (l < r) {
12+
mid = (l + r) >> 1;
13+
if (check(mid))
14+
r = mid;
15+
else
16+
l = mid + 1;
17+
}
18+
return l;
3219
}
3320

3421
int search_last(int l, int r) {
35-
int mid;
36-
while(l < r) {
37-
mid = (l + r + 1) / 2;
38-
if(check(mid)) l = mid;
39-
else r = mid - 1;
40-
}
41-
return l;
22+
int mid;
23+
while (l < r) {
24+
mid = (l + r + 1) >> 1;
25+
if (check(mid))
26+
l = mid;
27+
else
28+
r = mid - 1;
29+
}
30+
return l;
4231
}
4332

44-
signed main() {
45-
ios_base::sync_with_stdio(0);
46-
cin.tie(0);
47-
48-
return 0;
49-
}
33+
int main() {
34+
ios_base::sync_with_stdio(0);
35+
cin.tie(0);
36+
37+
return 0;
38+
}

DFS.cpp

+10-27
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,16 @@
1-
#include<bits/stdc++.h>
1+
#include <bits/stdc++.h>
2+
23
using namespace std;
3-
#define FOR(i,a,b) for(int i = (a); i <= (b); ++i)
4-
#define FORD(i,a,b) for(int i = (b); i >= (a); --i)
5-
#define TRAV(x,T) for(auto& x: (T))
6-
#define ALL(T) T.begin(), T.end()
7-
#define TAB(T,a,b) (T)+a, (T)+((b)+1)
8-
#define VAR(x) #x<<" = "<<x<<" "
9-
#define sz(x) (int)(x).size()
10-
#define nwd __gcd
11-
#define pb push_back
12-
#define st first
13-
#define nd second
14-
#define lc (v<<1)
15-
#define rc (v<<1|1)
16-
typedef long long ll;
17-
typedef long double ld;
18-
typedef pair<int, int> pii;
19-
typedef pair<ll, ll> pll;
20-
typedef vector<int> vi;
21-
#define deb if(0)
4+
225
const int N = 1e6, NT = N + 2;
236

24-
vi V[NT];
7+
vector<int> V[NT];
258
bitset<NT> Vis;
269
void dfs(int v, int p) {
27-
Vis[v] = true;
28-
TRAV(u, V[v]) {
29-
if(!Vis[u]) {
30-
dfs(u, v);
31-
}
10+
Vis[v] = true;
11+
for (const int &u : V[v]) {
12+
if (!Vis[u]) {
13+
dfs(u, v);
3214
}
33-
}
15+
}
16+
}

Dijkstra.cpp

+25-43
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,31 @@
1-
#include<bits/stdc++.h>
1+
#include <bits/stdc++.h>
2+
23
using namespace std;
3-
#define FOR(i,a,b) for(int i = (a); i <= (b); ++i)
4-
#define FORD(i,a,b) for(int i = (b); i >= (a); --i)
5-
#define TRAV(x,T) for(auto& x: (T))
6-
#define ALL(T) T.begin(), T.end()
7-
#define TAB(T,a,b) (T)+a, (T)+((b)+1)
8-
#define VAR(x) #x<<" = "<<x<<" "
9-
#define sz(x) (int)(x).size()
10-
#define nwd __gcd
11-
#define pb push_back
12-
#define st first
13-
#define nd second
14-
#define lc (v<<1)
15-
#define rc (v<<1|1)
16-
typedef long long ll;
17-
typedef long double ld;
18-
typedef pair<int, int> pii;
19-
typedef pair<ll, ll> pll;
20-
typedef pair<ll, int> pli;
21-
typedef vector<int> vi;
22-
#define deb if(0)
4+
235
const int N = 1e6, NT = N + 2;
24-
const ll INF = (ll)1e18 + 2;
256

26-
ll path[2 * NT], D[NT];
27-
vector<pii> V[NT];
28-
priority_queue<pli> Q;
7+
long long path[2 * NT], D[NT];
8+
vector<pair<int, int>> V[NT];
9+
priority_queue<pair<long, int>> Q;
2910

3011
void dijkstra(int v, int n) {
31-
FOR(i, 1, n) D[i] = INF;
32-
D[v] = 0;
33-
Q.push({0, v});
34-
while(!Q.empty()) {
35-
v = Q.top().nd;
36-
ll dist = -Q.top().st;
37-
Q.pop();
38-
if(dist > D[v])
39-
continue;
40-
TRAV(x, V[v]) {
41-
int u = x.st, c = x.nd;
42-
if(D[v] + c < D[u]) {
43-
D[u] = D[v] + c;
44-
path[u] = v;
45-
Q.push({-D[u], u});
46-
}
47-
}
12+
for (int i = 1; i <= n; i++)
13+
D[i] = LONG_LONG_MAX;
14+
D[v] = 0;
15+
Q.push({0, v});
16+
while (!Q.empty()) {
17+
v = Q.top().second;
18+
long long dist = -Q.top().first;
19+
Q.pop();
20+
if (dist > D[v])
21+
continue;
22+
for (const auto &x : V[v]) {
23+
int u = x.first, c = x.second;
24+
if (D[v] + c < D[u]) {
25+
D[u] = D[v] + c;
26+
path[u] = v;
27+
Q.push({-D[u], u});
28+
}
4829
}
49-
}
30+
}
31+
}

DrzewoPrzedzialPrzedzial.cpp

+50-56
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,65 @@
1-
#include<bits/stdc++.h>
1+
#include <bits/stdc++.h>
2+
23
using namespace std;
3-
#define FOR(i,a,b) for(int i = (a); i <= (b); ++i)
4-
#define FORD(i,a,b) for(int i = (b); i >= (a); --i)
5-
#define TRAV(x,T) for(auto& (x): (T))
6-
#define ALL(T) T.begin(), T.end()
7-
#define TAB(T,a,b) (T)+a, (T)+((b)+1)
8-
#define VAR(x) #x<<" = "<<x<<" "
9-
#define sz(x) (int)(x).size()
10-
#define nwd __gcd
11-
#define pb push_back
12-
#define st first
13-
#define nd second
14-
#define lc (v<<1)
15-
#define rc (v<<1|1)
16-
typedef long long ll;
17-
typedef long double ld;
18-
typedef pair<int, int> pii;
19-
typedef pair<ll, ll> pll;
20-
typedef vector<int> vi;
21-
#define deb if(0)
4+
5+
#define lc (v << 1)
6+
#define rc (v << 1 | 1)
7+
228
const int N = 3e5, NT = N + 2;
239
const int NTREE = 524288 * 2 + 2;
2410

25-
ll T[NTREE], lazy[NTREE], A[NT];
11+
long long T[NTREE], lazy[NTREE], A[NT];
2612

2713
int ntree = 1;
2814
void build(int n) {
29-
while(ntree < n) ntree <<= 1;
30-
FOR(i, 1, n) T[i + ntree - 1] = A[i];
31-
FORD(v, ntree - 1, 1) T[v] = max(T[lc], T[rc]);
15+
while (ntree < n)
16+
ntree <<= 1;
17+
for (int i = 1; i <= n; i++)
18+
T[i + ntree - 1] = A[i];
19+
for (int v = ntree - 1; v >= 1; v--)
20+
T[v] = max(T[lc], T[rc]);
3221
}
3322

34-
void push(int v, ll len) {
35-
T[lc] += lazy[v] * len / 2;
36-
T[rc] += lazy[v] * len / 2;
37-
lazy[lc] += lazy[v];
38-
lazy[rc] += lazy[v];
39-
lazy[v] = 0;
23+
void push(int v, long long len) {
24+
T[lc] += lazy[v] * len / 2;
25+
T[rc] += lazy[v] * len / 2;
26+
lazy[lc] += lazy[v];
27+
lazy[rc] += lazy[v];
28+
lazy[v] = 0;
4029
}
4130

42-
ll query(int v, int tl, int tr, int l, int r) {
43-
if (l <= tl and tr <= r) return T[v];
44-
int tm = (tl + tr) / 2;
45-
push(v, tr-tl+1);
46-
ll a = 0, b = 0;
47-
if(l <= tm) a = query(lc, tl, tm, l, r);
48-
if(r > tm) b = query(rc, tm+1, tr, l, r);
49-
T[v] = T[lc] + T[rc] + lazy[v] * (tr-tl+1);
50-
return a + b;
31+
long long query(int v, int tl, int tr, int l, int r) {
32+
if (l <= tl and tr <= r)
33+
return T[v];
34+
int tm = (tl + tr) >> 1;
35+
push(v, tr - tl + 1);
36+
long long a = 0, b = 0;
37+
if (l <= tm)
38+
a = query(lc, tl, tm, l, r);
39+
if (r > tm)
40+
b = query(rc, tm + 1, tr, l, r);
41+
T[v] = T[lc] + T[rc] + lazy[v] * (tr - tl + 1);
42+
return a + b;
5143
}
5244

53-
void update(int v, int tl, int tr, int l, int r, ll val) {
54-
if (l <= tl and tr <= r) {
55-
T[v] += val * (tr-tl+1);
56-
lazy[v] += val;
57-
return;
58-
}
59-
int tm = (tl + tr) / 2;
60-
push(v, tr-tl+1);
61-
if(l <= tm) update(lc, tl, tm, l, r, val);
62-
if(r > tm) update(rc, tm + 1, tr, l, r, val);
63-
T[v] = T[lc] + T[rc] + lazy[v] * (tr-tl+1);
45+
void update(int v, int tl, int tr, int l, int r, long long val) {
46+
if (l <= tl and tr <= r) {
47+
T[v] += val * (tr - tl + 1);
48+
lazy[v] += val;
49+
return;
50+
}
51+
int tm = (tl + tr) >> 1;
52+
push(v, tr - tl + 1);
53+
if (l <= tm)
54+
update(lc, tl, tm, l, r, val);
55+
if (r > tm)
56+
update(rc, tm + 1, tr, l, r, val);
57+
T[v] = T[lc] + T[rc] + lazy[v] * (tr - tl + 1);
6458
}
6559

66-
signed main() {
67-
ios_base::sync_with_stdio(0);
68-
cin.tie(0);
69-
70-
return 0;
71-
}
60+
int main() {
61+
ios_base::sync_with_stdio(0);
62+
cin.tie(0);
63+
64+
return 0;
65+
}

0 commit comments

Comments
 (0)