Advertisement
double_trouble

F

Nov 15th, 2015
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.76 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <cstdio>
  4. #include <vector>
  5. #include <cmath>
  6. #include <string>
  7. #include <algorithm>
  8. #include <string>
  9. #include <deque>
  10. #include <iomanip>
  11.  
  12. #define F first
  13. #define S second
  14.  
  15. using namespace std;
  16.  
  17. const long double eps2 = 0.0000005;
  18. const long double eps1 = 1e-5;
  19. const long double pi = 3.1415926535897932;
  20.  
  21. vector <int> a;
  22. int d[400010];
  23.  
  24. void inc(int v, int l, int r, int i, int c)
  25. {
  26.     if (l + 1 == r)
  27.     {
  28.         d[v] = c;
  29.         return;
  30.     }
  31.  
  32.     int m = (l + r) / 2;;
  33.     if (i < m)
  34.         inc(2 * v + 1, l, m, i, c);
  35.     else
  36.         inc(2 * v + 2, m, r, i, c);
  37.     d[v] = d[2 * v + 1] + d[2 * v + 2];
  38. }
  39.  
  40. int findans(int v, int l, int r, bool f)
  41. {
  42.     int ans = 0;
  43.     int m = (l + r) / 2;
  44.     if (f)
  45.     {
  46.         if (l + 1 == r)
  47.             if (l % 2 == 1)
  48.                 return d[v];
  49.             else
  50.                 return 0;
  51.         //int ans;
  52.         ans += findans(2 * v + 1, l, m, f);
  53.         ans += findans(2 * v + 2, m, r, f);
  54.     }
  55.     else
  56.     {
  57.         if (l + 1 == r)
  58.             if (l % 2 == 0)
  59.                 return d[v];
  60.             else
  61.                 return 0;
  62.         ans += findans(2 * v + 1, l, m, f);
  63.         ans += findans(2 * v + 2, m, r, f);
  64.     }
  65.     return ans;
  66. }
  67.  
  68. int main()
  69. {
  70.     ios_base::sync_with_stdio(0);
  71.     freopen("input.txt", "r", stdin);
  72.     //      freopen("output.txt", "w", stdout);
  73.  
  74.     int n;
  75.     cin >> n;
  76.  
  77.     //cout << n << endl;
  78.    
  79.     int x;
  80.     for (int i = 0; i < n; i++)
  81.     {
  82.         cin >> x;
  83.         //cout << x << " * ";
  84.         a.push_back(x);
  85.         inc(0, 0, n, i, x);
  86.     }
  87.  
  88.     int m;
  89.     cin >> m;
  90.     //cout << m << endl;
  91.     int p, c;
  92.     for (int i = 0; i < m; i++)
  93.     {
  94.         cin >> x;
  95.         if (x == 1)
  96.         {
  97.             cout << min(findans(0, 0, n, 1), findans(0, 0, n, 0)) << endl;
  98.             continue;
  99.         }
  100.         if (x == 2)
  101.         {
  102.             cin >> p >> c;
  103.             p--;
  104.             //cout << p << " " << c << endl;
  105.             inc(0, 0, n, p, c);
  106.             continue;
  107.         }
  108.     }
  109.  
  110.     return 0;
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement