From 4e115c414c21a9f45a6263f2bd006dc5f9c80fad Mon Sep 17 00:00:00 2001 From: dzhavid Date: Sun, 19 Dec 2021 20:53:12 +0300 Subject: [PATCH 1/7] A4.cpp added --- A4.cpp | 222 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 222 insertions(+) create mode 100644 A4.cpp diff --git a/A4.cpp b/A4.cpp new file mode 100644 index 0000000..930274a --- /dev/null +++ b/A4.cpp @@ -0,0 +1,222 @@ +#include +#include + +using std::cout; +using std::cin; + +class AVL_tree { + public: + explicit AVL_tree(int k) : key(k), left(nullptr), right(nullptr), height(1) {} + AVL_tree *insert(AVL_tree *p, int k); + bool findkey(AVL_tree *p, int key); + static std::string next(AVL_tree *p, int k); + std::string prev(AVL_tree *p, int k); + AVL_tree *remove(AVL_tree *p, int k); + ~AVL_tree(); + private: + static int true_height(AVL_tree *p); + static int bifactor(AVL_tree *p); + void fixheight(AVL_tree *p); + AVL_tree *rotateright(AVL_tree *p); + AVL_tree *rotateleft(AVL_tree *q); + AVL_tree *balance(AVL_tree *p); + AVL_tree *findmin(AVL_tree *p); + AVL_tree *removemin(AVL_tree *p); + int height; + AVL_tree *left; + AVL_tree *right; + int key; +}; + +int AVL_tree::true_height(AVL_tree *p) { + if (p != nullptr) { + return p->height; + } + return 0; +} + +int AVL_tree::bifactor(AVL_tree *p) { + return AVL_tree::true_height(p->right) - AVL_tree::true_height(p->left); +} + +void AVL_tree::fixheight(AVL_tree *p) { + int hl = true_height(p->left); + int hr = true_height(p->right); + p->height = std::max(hl, hr) + 1; +} + +AVL_tree *AVL_tree::rotateright(AVL_tree *p) { + AVL_tree *q = p->left; + p->left = q->right; + q->right = p; + fixheight(p); + fixheight(q); + return q; +} + +AVL_tree *AVL_tree::rotateleft(AVL_tree *q) { + AVL_tree *p = q->right; + q->right = p->left; + p->left = q; + fixheight(q); + fixheight(p); + return p; +} + +AVL_tree *AVL_tree::balance(AVL_tree *p) { + fixheight(p); + if (bifactor(p) == 2) { + if (bifactor(p->right) < 0) { + p->right = rotateright(p->right); + } + return rotateleft(p); + } + if (bifactor(p) == -2) { + if (bifactor(p->left) > 0) { + p->left = rotateleft(p->left); + } + return rotateright(p); + } + return p; +} + +AVL_tree *AVL_tree::insert(AVL_tree *p, int k) { + if (p == nullptr) return new AVL_tree(k); + if (k < p->key) + p->left = insert(p->left, k); + else + p->right = insert(p->right, k); + return balance(p); +} + +AVL_tree *AVL_tree::findmin(AVL_tree *p) { + if (p->left) { + return findmin(p->left); + } else return p; +} + +bool AVL_tree::findkey(AVL_tree *p, int key) { + if (p == nullptr) { + return false; + } + if (key < p->key) { + findkey(p->left, key); + } else { + if (key == p->key) { + return true; + } else { + findkey(p->right, key); + } + } +} + +AVL_tree *AVL_tree::removemin(AVL_tree *p) { + if (p->left == nullptr) { + return p->right; + } + p->left = removemin(p->left); + return balance(p); +} + +AVL_tree *AVL_tree::remove(AVL_tree *p, int k) { + if (p == nullptr) { + return nullptr; + } + if (k < p->key) { + p->left = remove(p->left, k); + } else { + if (k > p->key) { + p->right = remove(p->right, k); + } else { + AVL_tree *q = p->left; + AVL_tree *r = p->right; + delete p; + if (r == nullptr) return q; + AVL_tree *min = findmin(r); + min->right = removemin(r); + min->left = q; + return balance(min); + } + } + return balance(p); +} + +std::string AVL_tree::next(AVL_tree *p, int k) { + if (p == nullptr) { + return "none"; + } + AVL_tree *pip = p; + AVL_tree *otv = nullptr; + while (pip != nullptr) { + if (pip->key > k) { + otv = pip; + pip = pip->left; + } else { + pip = pip->right; + } + } + if (otv == nullptr) { + return "none"; + } else { + return std::to_string(otv->key); + } +} + +std::string AVL_tree::prev(AVL_tree *p, int k) { + if (p == nullptr) { + return "none"; + } + AVL_tree *pip = p; + AVL_tree *otv = nullptr; + while (pip != nullptr) { + if (pip->key >= k) { + pip = pip->left; + } else { + otv = pip; + pip = pip->right; + } + } + if (otv == nullptr) { + return "none"; + } else { + return std::to_string(otv->key); + } +} +AVL_tree::~AVL_tree() { + left = nullptr; + right = nullptr; + height = 0; + key = 0; +} + +int main() { + AVL_tree *L = nullptr; + std::string s; + while (cin >> s) { + int k; + cin >> k; + if (s == "insert") { + if (!L->findkey(L, k)) { + L = L->insert(L, k); + } + } + if (s == "exists") { + if (L->findkey(L, k)) { + cout << "true\n"; + } else { + cout << "false\n"; + } + } + if (s == "delete") { + if (L->findkey(L, k)) { + L = L->remove(L, k); + } + } + if (s == "next") { + cout << L->next(L, k) << "\n"; + } + if (s == "prev") { + cout << L->prev(L, k) << "\n"; + } + } +} \ No newline at end of file From 0edc83a387390213f1a48401664890a48f39070c Mon Sep 17 00:00:00 2001 From: dzhavid Date: Sun, 19 Dec 2021 21:03:03 +0300 Subject: [PATCH 2/7] C4 added --- C4.cpp | 190 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 C4.cpp diff --git a/C4.cpp b/C4.cpp new file mode 100644 index 0000000..95eb35b --- /dev/null +++ b/C4.cpp @@ -0,0 +1,190 @@ +#include +#include + +using std::cout; +using std::cin; + +class AVL_tree { + public: + explicit AVL_tree(int k) : size(1), height(1), key(k), left(nullptr), right(nullptr) {} + AVL_tree *insert(AVL_tree *p, int k); + AVL_tree *remove(AVL_tree *p, int k); + int get_k_static(AVL_tree* p, int k); + private: + static int true_height(AVL_tree *p); + static int bifactor(AVL_tree *p); + void fixheight(AVL_tree *p); + AVL_tree *rotateright(AVL_tree *p); + AVL_tree *rotateleft(AVL_tree *q); + AVL_tree *balance(AVL_tree *p); + AVL_tree *findmin(AVL_tree *p); + AVL_tree *removemin(AVL_tree *p); + static int true_size(AVL_tree *p); + void fixsize(AVL_tree *p); + int size; + int height; + int key; + AVL_tree *left; + AVL_tree *right; + ~AVL_tree(); +}; + +int AVL_tree::get_k_static(AVL_tree *p, int k) { + if (k == true_size(p->right) + 1){ + return p->key; + } + if ( k > true_size(p->right) + 1 ){ + return get_k_static(p->left, k - true_size(p->right) - 1); + } + if (k < true_size(p->right) + 1){ + return get_k_static(p->right, k); + } + //return 0; +} + +int AVL_tree::true_height(AVL_tree *p) { + if (p != nullptr) { + return p->height; + } + return 0; +} + +int AVL_tree::true_size(AVL_tree *p){ + if (p != nullptr) { + return p->size; + } + return 0; +} + +int AVL_tree::bifactor(AVL_tree *p) { + return AVL_tree::true_height(p->right) - AVL_tree::true_height(p->left); +} + +void AVL_tree::fixheight(AVL_tree *p) { + int hl = true_height(p->left); + int hr = true_height(p->right); + p->height = std::max(hl, hr) + 1; +} + +void AVL_tree::fixsize(AVL_tree *p){ + int hl = true_size(p->left); + int hr = true_size(p->right); + p->size = hl + hr + 1; +} + +AVL_tree *AVL_tree::rotateright(AVL_tree *p) { + AVL_tree *q = p->left; + p->left = q->right; + q->right = p; + fixheight(p); + fixsize(p); + fixheight(q); + + fixsize(q); + return q; +} + +AVL_tree *AVL_tree::rotateleft(AVL_tree *q) { + AVL_tree *p = q->right; + q->right = p->left; + p->left = q; + fixheight(q); + fixsize(q); + fixheight(p); + + fixsize(p); + return p; +} + +AVL_tree *AVL_tree::balance(AVL_tree *p) { + fixheight(p); + fixsize(p); + if (bifactor(p) == 2) { + if (bifactor(p->right) < 0) { + p->right = rotateright(p->right); + } + return rotateleft(p); + } + if (bifactor(p) == -2) { + if (bifactor(p->left) > 0) { + p->left = rotateleft(p->left); + } + return rotateright(p); + } + return p; +} + +AVL_tree *AVL_tree::insert(AVL_tree *p, int k) { + if (p == nullptr) return new AVL_tree(k); + if (k < p->key) + p->left = insert(p->left, k); + else + p->right = insert(p->right, k); + return balance(p); +} + +AVL_tree *AVL_tree::findmin(AVL_tree *p) { + if (p->left != nullptr) { + return findmin(p->left); + } else return p; +} + + +AVL_tree *AVL_tree::removemin(AVL_tree *p) { + if (p->left == nullptr) { + return p->right; + } + p->left = removemin(p->left); + return balance(p); +} + +AVL_tree *AVL_tree::remove(AVL_tree *p, int k) { + if (p == nullptr) { + return nullptr; + } + if (k < p->key) { + p->left = remove(p->left, k); + } else { + if (k > p->key) { + p->right = remove(p->right, k); + } else { + AVL_tree *q = p->left; + AVL_tree *r = p->right; + delete p; + if (r == nullptr) return q; + AVL_tree *min = findmin(r); + min->right = removemin(r); + min->left = q; + return balance(min); + } + } + return balance(p); +} +AVL_tree::~AVL_tree() { + left = nullptr; + right = nullptr; + height = 0; + key = 0; + size = 0; +} + +int main() { + AVL_tree *L = nullptr; + int n; + cin >> n; + for (int i = 0; i < n; i++){ + std::string c; + cin >> c; + int k; + cin >> k; + if (c == "+1" or c == "1"){ + L = L->insert(L, k); + } + if (c == "-1"){ + L = L->remove(L, k); + } + if (c == "0"){ + cout<get_k_static(L, k)<<"\n"; + } + } +} \ No newline at end of file From caba05a73e39ef9a6b23379ebabba3e05943856a Mon Sep 17 00:00:00 2001 From: dzhavid Date: Sun, 19 Dec 2021 21:12:49 +0300 Subject: [PATCH 3/7] H3.cpp added --- H3.cpp | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 H3.cpp diff --git a/H3.cpp b/H3.cpp new file mode 100644 index 0000000..7a571e1 --- /dev/null +++ b/H3.cpp @@ -0,0 +1,77 @@ +#include +#include +#include + +using std::cin; +using std::cout; +using std::vector; +using std::pair; + +class RMQ { + public: + explicit RMQ(vector a) { + int count_lines = int(ceil(log2(a.size()))); + int count_elements = a.size(); + + sparse_table.resize(count_lines, vector>(count_elements)); + + for (int i = 0; i < count_elements; i++) { + sparse_table[0][i] = {a[i], a[i]}; + } + + for (int i = 1; i < count_lines; i++) { + for (int j = 0; j < count_elements - (1 << i) + 1; ++j) { + sparse_table[i][j] = GetPairsStats(sparse_table[i - 1][j], sparse_table[i - 1][j + (1 << (i - 1))]); + } + } + } + + int GetSecondStat(int left, int right) { + int number = int(ceil(log2(right - left + 1))); + + return GetPairsStats(sparse_table[number - 1][left], + sparse_table[number - 1][right - (1 << (number - 1)) + 1]).second; + } + + private: + + static pair GetPairsStats(pair pair1, pair pair2) { + vector values{pair1.first, pair1.second, pair2.first, pair2.second}; + int stat1 = 1e9, stat2 = 1e9; + + for (int i = 0; i < values.size(); i++) { + if (values[i] < stat1) { + stat1 = values[i]; + } + } + for (int i = 0; i < values.size(); i++) { + if (values[i] < stat2 && values[i] != stat1) { + stat2 = values[i]; + } + } + + return {stat1, stat2}; + } + + vector>> sparse_table; +}; + +int main() { + int N, M; + cin >> N >> M; + + vector input(N); + for (int i = 0; i < N; i++) { + cin >> input[i]; + } + + RMQ rmq(input); + + for (int i = 0; i < M; ++i) { + int left, right; + cin >> left >> right; + left--; + right--; + cout << rmq.GetSecondStat(left, right) << "\n"; + } +} \ No newline at end of file From 6e6c1ef5b7fc8f58b490d817979d25964024b9fe Mon Sep 17 00:00:00 2001 From: dzhavid Date: Sun, 19 Dec 2021 21:32:43 +0300 Subject: [PATCH 4/7] I2.cpp added --- I2.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 I2.cpp diff --git a/I2.cpp b/I2.cpp new file mode 100644 index 0000000..ab38436 --- /dev/null +++ b/I2.cpp @@ -0,0 +1,44 @@ +#include + +long long Partition(long long a[], long long left, long long right) { + long long pivot = a[(left + right) / 2]; + long long i = left; + long long j = right; + while(i <= j) { + while (a[i] < pivot) { + i++; + } + while (a[j] > pivot) { + j--; + } + if (i >= j) break; + std::swap(a[i], a[j]); + i++; + j--; + } + return j; +} + +void QuickSort(long long a[], long long left, long long right) { + if (left < right) { + int pivot = Partition(a, left, right); + QuickSort(a, left, pivot); + QuickSort(a, pivot + 1, right); + } +} + +int main() { + std::ios_base::sync_with_stdio(false); + std::cin.tie(NULL); + int n; + std::cin >> n; + long long* buffer = new long long[n]; + for (int i = 0; i < n; i++) { + std::cin >> buffer[i]; + } + QuickSort(buffer, 0, n - 1); + for (int i = 0; i < n; i++){ + std::cout< Date: Sun, 19 Dec 2021 21:34:21 +0300 Subject: [PATCH 5/7] Delete A4.cpp --- A4.cpp | 222 --------------------------------------------------------- 1 file changed, 222 deletions(-) delete mode 100644 A4.cpp diff --git a/A4.cpp b/A4.cpp deleted file mode 100644 index 930274a..0000000 --- a/A4.cpp +++ /dev/null @@ -1,222 +0,0 @@ -#include -#include - -using std::cout; -using std::cin; - -class AVL_tree { - public: - explicit AVL_tree(int k) : key(k), left(nullptr), right(nullptr), height(1) {} - AVL_tree *insert(AVL_tree *p, int k); - bool findkey(AVL_tree *p, int key); - static std::string next(AVL_tree *p, int k); - std::string prev(AVL_tree *p, int k); - AVL_tree *remove(AVL_tree *p, int k); - ~AVL_tree(); - private: - static int true_height(AVL_tree *p); - static int bifactor(AVL_tree *p); - void fixheight(AVL_tree *p); - AVL_tree *rotateright(AVL_tree *p); - AVL_tree *rotateleft(AVL_tree *q); - AVL_tree *balance(AVL_tree *p); - AVL_tree *findmin(AVL_tree *p); - AVL_tree *removemin(AVL_tree *p); - int height; - AVL_tree *left; - AVL_tree *right; - int key; -}; - -int AVL_tree::true_height(AVL_tree *p) { - if (p != nullptr) { - return p->height; - } - return 0; -} - -int AVL_tree::bifactor(AVL_tree *p) { - return AVL_tree::true_height(p->right) - AVL_tree::true_height(p->left); -} - -void AVL_tree::fixheight(AVL_tree *p) { - int hl = true_height(p->left); - int hr = true_height(p->right); - p->height = std::max(hl, hr) + 1; -} - -AVL_tree *AVL_tree::rotateright(AVL_tree *p) { - AVL_tree *q = p->left; - p->left = q->right; - q->right = p; - fixheight(p); - fixheight(q); - return q; -} - -AVL_tree *AVL_tree::rotateleft(AVL_tree *q) { - AVL_tree *p = q->right; - q->right = p->left; - p->left = q; - fixheight(q); - fixheight(p); - return p; -} - -AVL_tree *AVL_tree::balance(AVL_tree *p) { - fixheight(p); - if (bifactor(p) == 2) { - if (bifactor(p->right) < 0) { - p->right = rotateright(p->right); - } - return rotateleft(p); - } - if (bifactor(p) == -2) { - if (bifactor(p->left) > 0) { - p->left = rotateleft(p->left); - } - return rotateright(p); - } - return p; -} - -AVL_tree *AVL_tree::insert(AVL_tree *p, int k) { - if (p == nullptr) return new AVL_tree(k); - if (k < p->key) - p->left = insert(p->left, k); - else - p->right = insert(p->right, k); - return balance(p); -} - -AVL_tree *AVL_tree::findmin(AVL_tree *p) { - if (p->left) { - return findmin(p->left); - } else return p; -} - -bool AVL_tree::findkey(AVL_tree *p, int key) { - if (p == nullptr) { - return false; - } - if (key < p->key) { - findkey(p->left, key); - } else { - if (key == p->key) { - return true; - } else { - findkey(p->right, key); - } - } -} - -AVL_tree *AVL_tree::removemin(AVL_tree *p) { - if (p->left == nullptr) { - return p->right; - } - p->left = removemin(p->left); - return balance(p); -} - -AVL_tree *AVL_tree::remove(AVL_tree *p, int k) { - if (p == nullptr) { - return nullptr; - } - if (k < p->key) { - p->left = remove(p->left, k); - } else { - if (k > p->key) { - p->right = remove(p->right, k); - } else { - AVL_tree *q = p->left; - AVL_tree *r = p->right; - delete p; - if (r == nullptr) return q; - AVL_tree *min = findmin(r); - min->right = removemin(r); - min->left = q; - return balance(min); - } - } - return balance(p); -} - -std::string AVL_tree::next(AVL_tree *p, int k) { - if (p == nullptr) { - return "none"; - } - AVL_tree *pip = p; - AVL_tree *otv = nullptr; - while (pip != nullptr) { - if (pip->key > k) { - otv = pip; - pip = pip->left; - } else { - pip = pip->right; - } - } - if (otv == nullptr) { - return "none"; - } else { - return std::to_string(otv->key); - } -} - -std::string AVL_tree::prev(AVL_tree *p, int k) { - if (p == nullptr) { - return "none"; - } - AVL_tree *pip = p; - AVL_tree *otv = nullptr; - while (pip != nullptr) { - if (pip->key >= k) { - pip = pip->left; - } else { - otv = pip; - pip = pip->right; - } - } - if (otv == nullptr) { - return "none"; - } else { - return std::to_string(otv->key); - } -} -AVL_tree::~AVL_tree() { - left = nullptr; - right = nullptr; - height = 0; - key = 0; -} - -int main() { - AVL_tree *L = nullptr; - std::string s; - while (cin >> s) { - int k; - cin >> k; - if (s == "insert") { - if (!L->findkey(L, k)) { - L = L->insert(L, k); - } - } - if (s == "exists") { - if (L->findkey(L, k)) { - cout << "true\n"; - } else { - cout << "false\n"; - } - } - if (s == "delete") { - if (L->findkey(L, k)) { - L = L->remove(L, k); - } - } - if (s == "next") { - cout << L->next(L, k) << "\n"; - } - if (s == "prev") { - cout << L->prev(L, k) << "\n"; - } - } -} \ No newline at end of file From aa721040acbe22cdf27573277859e1f76e5ca2db Mon Sep 17 00:00:00 2001 From: dzhav <89522326+dzhav@users.noreply.github.com> Date: Sun, 19 Dec 2021 21:34:31 +0300 Subject: [PATCH 6/7] Delete C4.cpp --- C4.cpp | 190 --------------------------------------------------------- 1 file changed, 190 deletions(-) delete mode 100644 C4.cpp diff --git a/C4.cpp b/C4.cpp deleted file mode 100644 index 95eb35b..0000000 --- a/C4.cpp +++ /dev/null @@ -1,190 +0,0 @@ -#include -#include - -using std::cout; -using std::cin; - -class AVL_tree { - public: - explicit AVL_tree(int k) : size(1), height(1), key(k), left(nullptr), right(nullptr) {} - AVL_tree *insert(AVL_tree *p, int k); - AVL_tree *remove(AVL_tree *p, int k); - int get_k_static(AVL_tree* p, int k); - private: - static int true_height(AVL_tree *p); - static int bifactor(AVL_tree *p); - void fixheight(AVL_tree *p); - AVL_tree *rotateright(AVL_tree *p); - AVL_tree *rotateleft(AVL_tree *q); - AVL_tree *balance(AVL_tree *p); - AVL_tree *findmin(AVL_tree *p); - AVL_tree *removemin(AVL_tree *p); - static int true_size(AVL_tree *p); - void fixsize(AVL_tree *p); - int size; - int height; - int key; - AVL_tree *left; - AVL_tree *right; - ~AVL_tree(); -}; - -int AVL_tree::get_k_static(AVL_tree *p, int k) { - if (k == true_size(p->right) + 1){ - return p->key; - } - if ( k > true_size(p->right) + 1 ){ - return get_k_static(p->left, k - true_size(p->right) - 1); - } - if (k < true_size(p->right) + 1){ - return get_k_static(p->right, k); - } - //return 0; -} - -int AVL_tree::true_height(AVL_tree *p) { - if (p != nullptr) { - return p->height; - } - return 0; -} - -int AVL_tree::true_size(AVL_tree *p){ - if (p != nullptr) { - return p->size; - } - return 0; -} - -int AVL_tree::bifactor(AVL_tree *p) { - return AVL_tree::true_height(p->right) - AVL_tree::true_height(p->left); -} - -void AVL_tree::fixheight(AVL_tree *p) { - int hl = true_height(p->left); - int hr = true_height(p->right); - p->height = std::max(hl, hr) + 1; -} - -void AVL_tree::fixsize(AVL_tree *p){ - int hl = true_size(p->left); - int hr = true_size(p->right); - p->size = hl + hr + 1; -} - -AVL_tree *AVL_tree::rotateright(AVL_tree *p) { - AVL_tree *q = p->left; - p->left = q->right; - q->right = p; - fixheight(p); - fixsize(p); - fixheight(q); - - fixsize(q); - return q; -} - -AVL_tree *AVL_tree::rotateleft(AVL_tree *q) { - AVL_tree *p = q->right; - q->right = p->left; - p->left = q; - fixheight(q); - fixsize(q); - fixheight(p); - - fixsize(p); - return p; -} - -AVL_tree *AVL_tree::balance(AVL_tree *p) { - fixheight(p); - fixsize(p); - if (bifactor(p) == 2) { - if (bifactor(p->right) < 0) { - p->right = rotateright(p->right); - } - return rotateleft(p); - } - if (bifactor(p) == -2) { - if (bifactor(p->left) > 0) { - p->left = rotateleft(p->left); - } - return rotateright(p); - } - return p; -} - -AVL_tree *AVL_tree::insert(AVL_tree *p, int k) { - if (p == nullptr) return new AVL_tree(k); - if (k < p->key) - p->left = insert(p->left, k); - else - p->right = insert(p->right, k); - return balance(p); -} - -AVL_tree *AVL_tree::findmin(AVL_tree *p) { - if (p->left != nullptr) { - return findmin(p->left); - } else return p; -} - - -AVL_tree *AVL_tree::removemin(AVL_tree *p) { - if (p->left == nullptr) { - return p->right; - } - p->left = removemin(p->left); - return balance(p); -} - -AVL_tree *AVL_tree::remove(AVL_tree *p, int k) { - if (p == nullptr) { - return nullptr; - } - if (k < p->key) { - p->left = remove(p->left, k); - } else { - if (k > p->key) { - p->right = remove(p->right, k); - } else { - AVL_tree *q = p->left; - AVL_tree *r = p->right; - delete p; - if (r == nullptr) return q; - AVL_tree *min = findmin(r); - min->right = removemin(r); - min->left = q; - return balance(min); - } - } - return balance(p); -} -AVL_tree::~AVL_tree() { - left = nullptr; - right = nullptr; - height = 0; - key = 0; - size = 0; -} - -int main() { - AVL_tree *L = nullptr; - int n; - cin >> n; - for (int i = 0; i < n; i++){ - std::string c; - cin >> c; - int k; - cin >> k; - if (c == "+1" or c == "1"){ - L = L->insert(L, k); - } - if (c == "-1"){ - L = L->remove(L, k); - } - if (c == "0"){ - cout<get_k_static(L, k)<<"\n"; - } - } -} \ No newline at end of file From 004353cf99f360f0ef948dc3cc01ef8b8cd803a6 Mon Sep 17 00:00:00 2001 From: dzhav <89522326+dzhav@users.noreply.github.com> Date: Sun, 19 Dec 2021 21:34:39 +0300 Subject: [PATCH 7/7] Delete H3.cpp --- H3.cpp | 77 ---------------------------------------------------------- 1 file changed, 77 deletions(-) delete mode 100644 H3.cpp diff --git a/H3.cpp b/H3.cpp deleted file mode 100644 index 7a571e1..0000000 --- a/H3.cpp +++ /dev/null @@ -1,77 +0,0 @@ -#include -#include -#include - -using std::cin; -using std::cout; -using std::vector; -using std::pair; - -class RMQ { - public: - explicit RMQ(vector a) { - int count_lines = int(ceil(log2(a.size()))); - int count_elements = a.size(); - - sparse_table.resize(count_lines, vector>(count_elements)); - - for (int i = 0; i < count_elements; i++) { - sparse_table[0][i] = {a[i], a[i]}; - } - - for (int i = 1; i < count_lines; i++) { - for (int j = 0; j < count_elements - (1 << i) + 1; ++j) { - sparse_table[i][j] = GetPairsStats(sparse_table[i - 1][j], sparse_table[i - 1][j + (1 << (i - 1))]); - } - } - } - - int GetSecondStat(int left, int right) { - int number = int(ceil(log2(right - left + 1))); - - return GetPairsStats(sparse_table[number - 1][left], - sparse_table[number - 1][right - (1 << (number - 1)) + 1]).second; - } - - private: - - static pair GetPairsStats(pair pair1, pair pair2) { - vector values{pair1.first, pair1.second, pair2.first, pair2.second}; - int stat1 = 1e9, stat2 = 1e9; - - for (int i = 0; i < values.size(); i++) { - if (values[i] < stat1) { - stat1 = values[i]; - } - } - for (int i = 0; i < values.size(); i++) { - if (values[i] < stat2 && values[i] != stat1) { - stat2 = values[i]; - } - } - - return {stat1, stat2}; - } - - vector>> sparse_table; -}; - -int main() { - int N, M; - cin >> N >> M; - - vector input(N); - for (int i = 0; i < N; i++) { - cin >> input[i]; - } - - RMQ rmq(input); - - for (int i = 0; i < M; ++i) { - int left, right; - cin >> left >> right; - left--; - right--; - cout << rmq.GetSecondStat(left, right) << "\n"; - } -} \ No newline at end of file