Advertisement
Screbber

Untitled

Oct 21st, 2022
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.84 KB | None | 0 0
  1. #include <vector>
  2. #include <iostream>
  3. #include <iterator>
  4. #include <sstream>
  5.  
  6. class SuperVector {
  7. public:
  8.     SuperVector(int n, bool is_sum, int mod = 0) {
  9.         size_ = n;
  10.         capacity_ = n * 2;
  11.         arr_ = new int[capacity_];
  12.         for (int i = 0; i < n; ++i) {
  13.             std::cin >> arr_[i];
  14.         }
  15.         mod_ = mod;
  16.         is_operation_sum_ = is_sum;
  17.     }
  18.  
  19.     ~SuperVector() {
  20.         delete[] arr_;
  21.     }
  22.  
  23.     void compute(int start, int end) {
  24.         int sum = 0;
  25.         if (is_operation_sum_) {
  26.             for (int i = start; i < end + 1; ++i) {
  27.                 sum += arr_[i - 1];
  28.             }
  29.             std::cout << sum % mod_ << '\n';
  30.         } else {
  31.             for (int i = start; i < end + 1; ++i) {
  32.                 sum ^= arr_[i - 1];
  33.             }
  34.             std::cout << sum << '\n';
  35.         }
  36.     }
  37.  
  38.     size_t size() const {
  39.         return size_;
  40.     }
  41.  
  42.     void insert(size_t pos, int value) {
  43.         --pos;
  44.         int *temp = new int[capacity_];
  45.         for (size_t i = 0; i < size_; ++i) {
  46.             temp[i] = arr_[i];
  47.         }
  48.         if (size_ >= capacity_) {
  49.             delete[] arr_;
  50.             arr_ = new int[capacity_ * 2];
  51.             ++size_;
  52.             for (size_t i = 0; i < pos; ++i) {
  53.                 arr_[i] = temp[i];
  54.             }
  55.             arr_[pos] = value;
  56.             for (size_t i = pos + 1; i < size_; ++i) {
  57.                 arr_[i] = temp[i - 1];
  58.             }
  59.         } else {
  60.             for (size_t i = 0; i < pos; ++i) {
  61.                 arr_[i] = temp[i];
  62.             }
  63.             arr_[pos] = value;
  64.             ++size_;
  65.             for (size_t i = pos + 1; i < size_; ++i) {
  66.                 arr_[i] = temp[i - 1];
  67.             }
  68.         }
  69.         delete[] temp;
  70.     }
  71.  
  72.     void erase(size_t pos) {
  73.         --pos;
  74.         for (size_t i = pos; i < size_ - 1; ++i) {
  75.             arr_[i] = arr_[i + 1];
  76.         }
  77.         --size_;
  78.     }
  79.  
  80.     int at(size_t pos) {
  81.         return arr_[--pos];
  82.     }
  83.  
  84. private:
  85.     int *arr_;
  86.     size_t size_;
  87.     size_t capacity_;
  88.     bool is_operation_sum_ = true;
  89.     int mod_ = 0;
  90. };
  91.  
  92. std::vector<std::string> split(const std::string &line, char delim) {
  93.     std::stringstream ss(line);
  94.     std::string item;
  95.     std::vector<std::string> elems;
  96.     while (std::getline(ss, item, delim)) {
  97.         elems.push_back(item);
  98.     }
  99.     return elems;
  100. }
  101.  
  102. int main() {
  103.     std::ios_base::sync_with_stdio(false);
  104.     std::cin.tie(nullptr);
  105.     std::cout.tie(nullptr);
  106.  
  107.     std::string command;
  108.     std::getline(std::cin, command);
  109.     int n, m;
  110.     std::cin >> n;
  111.     SuperVector *super_vector;
  112.     if (command == "^") {
  113.         super_vector = new SuperVector(n, false);
  114.     } else {
  115.         int mod = std::stoi(split(command, ' ')[1]);
  116.         super_vector = new SuperVector(n, true, mod);
  117.     }
  118.     std::cin >> m;
  119.     for (int i = 0; i < m; ++i) {
  120.         std::string line;
  121.         if (i == 0) {
  122.             std::getline(std::cin, line);
  123.         }
  124.         std::getline(std::cin, line);
  125.         auto command_arr = split(line, ' ');
  126.         if (command_arr[0] == "insert") {
  127.             int pos, x;
  128.             pos = std::stoi(command_arr[1]);
  129.             x = std::stoi(command_arr[2]);
  130.             super_vector->insert(pos, x);
  131.         } else if (command_arr[0] == "erase") {
  132.             super_vector->erase(std::stoi(command_arr[1]));
  133.         } else if (command_arr[0] == "at") {
  134.             std::cout << super_vector->at(std::stoi(command_arr[1])) << '\n';
  135.         } else if (command_arr[0] == "compute") {
  136.             int l, r;
  137.             l = std::stoi(command_arr[1]);
  138.             r = std::stoi(command_arr[2]);
  139.             super_vector->compute(l, r);
  140.         } else if (command_arr[0] == "size") {
  141.             std::cout << super_vector->size() << '\n';
  142.         }
  143.     }
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement