diff options
| author | Paul Jungeblut <paul.jungeblut@gmail.com> | 2016-10-06 00:14:07 +0200 |
|---|---|---|
| committer | Paul Jungeblut <paul.jungeblut@gmail.com> | 2016-10-06 00:14:07 +0200 |
| commit | 7c97303ec8fc5dfc278198687d8c5154e0cd1baf (patch) | |
| tree | 4ad42ac9f3cafeef0aa7b324b2bc8c62f29fd76c | |
| parent | b585d932530f755e80829bfc5d28d97b5afe1e15 (diff) | |
Adjusting datastructures chapter to new layout.
| -rw-r--r-- | datastructures/RMQ.cpp | 5 | ||||
| -rw-r--r-- | datastructures/segmentTree.cpp | 3 | ||||
| -rw-r--r-- | datastructures/stlTree.cpp | 6 | ||||
| -rw-r--r-- | datastructures/unionFind.cpp | 5 | ||||
| -rw-r--r-- | tcr.pdf | bin | 265366 -> 265152 bytes |
5 files changed, 11 insertions, 8 deletions
diff --git a/datastructures/RMQ.cpp b/datastructures/RMQ.cpp index 8e6a33f..0eed967 100644 --- a/datastructures/RMQ.cpp +++ b/datastructures/RMQ.cpp @@ -1,5 +1,5 @@ vector<int> data(RMQ_SIZE); -vector<vector<int>> rmq(floor(log2(RMQ_SIZE)) + 1, vector<int>(RMQ_SIZE)); +vector<vector<int>> rmq(floor(log2(RMQ_SIZE))+1, vector<int>(RMQ_SIZE)); // Baut Struktur auf. O(n*log(n)) void initRMQ() { @@ -8,7 +8,8 @@ void initRMQ() { if(i == 0) rmq[0][l] = l; else { int r = l + ss; - rmq[i][l] = (data[rmq[i-1][l]] <= data[rmq[i-1][r]] ? rmq[i-1][l] : rmq[i-1][r]); + rmq[i][l] = (data[rmq[i-1][l]] <= data[rmq[i-1][r]]) ? + rmq[i-1][l] : rmq[i-1][r]; }}}} // Gibt den Index des Minimums im Intervall [l,r) zurück. O(1). diff --git a/datastructures/segmentTree.cpp b/datastructures/segmentTree.cpp index cb303d1..c67cd8b 100644 --- a/datastructures/segmentTree.cpp +++ b/datastructures/segmentTree.cpp @@ -6,7 +6,7 @@ int query(int x, int y, int k = 0, int X = 0, int Y = MAX_N - 1) { if (x <= X && Y <= y) return m[k]; if (y < X || Y < x) return -1000000000; // Ein "neutrales" Element. int M = (X + Y) / 2; - return max(query(x, y, 2 * k + 1, X, M), query(x, y, 2 * k + 2, M + 1, Y)); + return max(query(x, y, 2*k+1, X, M), query(x, y, 2*k+2, M+1, Y)); } void update(int i, int v, int k = 0, int X = 0, int Y = MAX_N - 1) { @@ -18,7 +18,6 @@ void update(int i, int v, int k = 0, int X = 0, int Y = MAX_N - 1) { m[k] = max(m[2 * k + 1], m[2 * k + 2]); } -// Einmal vor allen anderen Operationen aufrufen. void init(int k = 0, int X = 0, int Y = MAX_N - 1) { if (X == Y) { m[k] = a[X]; return; } int M = (X + Y) / 2; diff --git a/datastructures/stlTree.cpp b/datastructures/stlTree.cpp index a20b0dc..6dde73a 100644 --- a/datastructures/stlTree.cpp +++ b/datastructures/stlTree.cpp @@ -2,11 +2,13 @@ #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; -typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> Tree; +typedef tree<int, null_type, less<int>, rb_tree_tag, + tree_order_statistics_node_update> Tree; + int main() { Tree X; for (int i = 1; i <= 16; i <<= 1) X.insert(i); // {1, 2, 4, 8, 16} cout << *X.find_by_order(3) << endl; // => 8 - cout << X.order_of_key(10) << endl; // => 4 = Nachfolger von 10 = minimales i, sodass X[i] >= 10 + cout << X.order_of_key(10) << endl; // => 4 = min i, mit X[i] >= 10 return 0; } diff --git a/datastructures/unionFind.cpp b/datastructures/unionFind.cpp index 3f7df97..98758aa 100644 --- a/datastructures/unionFind.cpp +++ b/datastructures/unionFind.cpp @@ -1,6 +1,7 @@ // Laufzeit: O(n*alpha(n)) -// "height" ist obere Schranke für die Höhe der Bäume. Sobald Pfadkompression -// angewendet wurde, ist die genaue Höhe nicht mehr effizient berechenbar. +// "height" ist obere Schranke für die Höhe der Bäume. Sobald +// Pfadkompression angewendet wurde, ist die genaue Höhe nicht mehr +// effizient berechenbar. vector<int> parent // Initialisiere mit Index im Array. vector<int> height; // Initialisiere mit 0. |
