Advertisement
Derga

Untitled

Aug 22nd, 2023
479
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.18 KB | None | 0 0
  1. #include <iostream>
  2. #include <list>
  3.  
  4. using namespace std;
  5.  
  6. long long sqr(long long x) {
  7.     return x * x;
  8. }
  9.  
  10. int main() {
  11.     long long sum_sqr = 0;
  12.  
  13.     int n;
  14.     cin >> n;
  15.     list<long long> segments;
  16.     for (int i = 0; i < n; ++i) {
  17.         long long len;
  18.         cin >> len;
  19.         segments.push_back(len);
  20.         sum_sqr += sqr(len);
  21.     }
  22.  
  23.     cout << sum_sqr << "\n";
  24.  
  25.     auto ptr = segments.begin();
  26.     int index = 1;
  27.  
  28.     int k;
  29.     cin >> k;
  30.     for (int i = 0; i < k; ++i) {
  31.         int e, v;
  32.         cin >> e >> v;
  33.  
  34.         if (index < v) {
  35.             while (index < v) {
  36.                 ++index;
  37.                 ++ptr;
  38.             }
  39.         } else {
  40.             while (index > v) {
  41.                 --index;
  42.                 --ptr;
  43.             }
  44.         }
  45.  
  46.         long long len = *ptr;
  47.         sum_sqr -= sqr(len);
  48.         long long first_len = len / 2;
  49.         long long second_len = len - first_len;
  50.  
  51.         if (e == 1) {
  52.             auto next_ptr = ptr;
  53.             ++next_ptr;
  54.  
  55.             if (next_ptr == segments.end()) {   // ptr is the last element in list
  56.                 auto prev_ptr = ptr;
  57.                 --prev_ptr;
  58.  
  59.                 sum_sqr -= sqr(*prev_ptr);
  60.                 *prev_ptr += len;
  61.                 sum_sqr += sqr(*prev_ptr);
  62.             } else if (ptr == segments.begin()) {
  63.                 sum_sqr -= sqr(*next_ptr);
  64.                 *next_ptr += len;
  65.                 sum_sqr += sqr(*next_ptr);
  66.             } else {
  67.                 auto prev_ptr = ptr;
  68.                 --prev_ptr;
  69.  
  70.                 sum_sqr -= sqr(*prev_ptr);
  71.                 sum_sqr -= sqr(*next_ptr);
  72.                 *prev_ptr += first_len;
  73.                 *next_ptr += second_len;
  74.                 sum_sqr += sqr(*prev_ptr);
  75.                 sum_sqr += sqr(*next_ptr);
  76.             }
  77.  
  78.             ptr = segments.erase(ptr);
  79.         } else {
  80.             *ptr = first_len;
  81.  
  82.             auto next_ptr = ptr;
  83.             ++next_ptr;
  84.             segments.insert(next_ptr, second_len);
  85.  
  86.             sum_sqr += sqr(first_len);
  87.             sum_sqr += sqr(second_len);
  88.         }
  89.  
  90.         cout << sum_sqr << "\n";
  91.     }
  92.  
  93.     return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement