CCCPaste

55a8f2f060091

#include <iostream>
#include <iomanip>
#include <cstdint>
#include <algorithm>
#include <string>
#include <cassert>
#include "vector.h"

void Info(const MyVector &vector) {
std::cout << vector.Sum() << ' '
<< std::setprecision(4) << std::fixed
<< vector.Mean() << ' '
<< vector.Min() << ' '
<< vector.Max() << '\n';
}

void CopyReverse(MyVector v) {
std::reverse(v.Begin(), v.End());
std::cout << v << '\n';
}

void CheckSlice(MyVector v) {
(*v(0, 0).Begin()) = 6;
assert(v[0] == 6);
}

int main() {
int n, m;
std::cin >> n >> m;
MyVector vec(n);
std::cin >> vec;
static_assert(sizeof(vec(0, 0)) <= 16);
CopyReverse(vec);

int x = vec[0];
CheckSlice(vec);
assert(v[0] == x);


std::string cmd;
while (m--) {
std::cin >> cmd;
if (cmd == "add") {
size_t index;
int32_t x;
std::cin >> index >> x;
if (index != 0) {
vec.Insert(x, vec.Begin() + index - 1);
} else {
vec.PushBack(x);
}
} else if (cmd == "remove") {
size_t index;
std::cin >> index;
if (index != 0) {
vec.Erase(vec.Begin() + index - 1);
} else {
vec.PopBack();
}
} else if (cmd == "get") {
ssize_t index; std::cin >> index;
std::cout << vec[index] << '\n';
} else if (cmd == "subget") {
ssize_t l, r; std::cin >> l, r;
std::cout << vec(l, r) << '\n';
} else if (cmd == "concat") {
size_t m; std::cin >> m;
MyVector other(m);
std::cin >> other;
vec ^= other;
} else if (cmd == "info") {
Info(vec);
}
#ifdef DEBUG
std::cout << vec << '\n';
#endif
}
std::cout << vec << '\n';
}