2024-06-12 23:29:22 +04:00

32 lines
1.5 KiB
C++

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct M { string t; int y; double r; };
struct N { M m; N* n; N(M m) :m(m), n(nullptr) {} };
class D {
N* f, * r; public:D() :f(nullptr), r(nullptr) {}
void i(M m) { N* n = new N(m); if (!f)f = r = n; else { n->n = f; f = n; } }
void a(M m) { N* n = new N(m); if (!f)f = r = n; else { r->n = n; r = n; } }
void rf() { if (f) { N* t = f; f = f->n; delete t; if (!f)r = nullptr; } }
void rr() { if (f) { if (f == r) { delete f; f = r = nullptr; } else { N* t = f; while (t->n != r)t = t->n; delete r; r = t; r->n = nullptr; } } }
M gf() { return f->m; }
M gr() { return r->m; }
};
void b(vector<M>& m) { int n = m.size(); for (int i = 0; i < n - 1; ++i)for (int j = 0; j < n - i - 1; ++j)if (m[j].r > m[j + 1].r)swap(m[j], m[j + 1]); }
int p(vector<M>& m, int l, int h) { double p = m[h].r; int i = l - 1; for (int j = l; j <= h - 1; ++j)if (m[j].r < p) { ++i; swap(m[i], m[j]); }swap(m[i + 1], m[h]); return i + 1; }
void q(vector<M>& m, int l, int h) { if (l < h) { int pi = p(m, l, h); q(m, l, pi - 1); q(m, pi + 1, h); } }
int main() {
D d;
d.i({ "M1",2000,8.5 });
d.a({ "M2",2005,9.0 });
d.i({ "M3",2010,7.8 });
vector<M> m = { {"MA",2002,8.2}, {"MB",2008,7.5}, {"MC",2015,9.1}, {"MD",2018,8.7} };
b(m);
for (M& e : m)
cout << e.t << " " << e.y << " " << e.r << endl;
q(m, 0, m.size() - 1);
for (M& e : m)
cout << e.t << " " << e.y << " " << e.r << endl;
return 0;
}