Advertisement
Guest User

Untitled

a guest
Dec 5th, 2016
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.80 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define vec vector
  6. #define ALL(x) (x).begin(), (x).end()
  7.  
  8. typedef long long ll;
  9. typedef pair< int, int > pii;
  10.  
  11. int const inf = 1000 * 1000 * 1000;
  12.  
  13. inline ll ar(ll l, ll r) {
  14.     return (l + r) * (r - l + 1) / 2;
  15. }
  16.  
  17. int n, m, len = 1;
  18.  
  19. struct Node {
  20.     Node * l, * r;
  21.     ll sum;
  22.     Node() : l(0), r(0), sum(0) { }
  23. } * t;
  24.  
  25. ll get_sum(int tl, int tr) {
  26.    return ar(1ll * tl * len, 1ll * tr * len + len - 1);
  27. }
  28.  
  29. void up(Node *& v, int tl, int tm, int tr) {
  30.     v->sum = 0;
  31.     if(v->l) v->sum += v->l->sum;
  32.     else v->sum += get_sum(tl, tm);
  33.     if(v->r) v->sum += v->r->sum;
  34.     else v->sum += get_sum(tm + 1, tr);
  35. }
  36.  
  37. void put(Node *& v, int tl, int tr, int pos, ll val) {
  38.     if(!v) {
  39.         v = new Node();
  40.         v->sum = get_sum(tl, tr);
  41.     }
  42.     if(tl == tr) {
  43.         v->sum = val;
  44.     }else {
  45.         int tm = (tl + tr) >> 1;
  46.         if(pos <= tm) put(v->l, tl, tm, pos, val);
  47.         else put(v->r, tm + 1, tr, pos, val);
  48.         up(v, tl, tm, tr);
  49.     }
  50. }
  51.  
  52. void show(Node * v, int tl, int tr) {
  53.     if(tl < tr) {
  54.         int tm = (tl + tr) >> 1;
  55.         show(v ? v->l : 0, tl, tm);
  56.         show(v ? v->r : 0, tm + 1, tr);
  57.     }else {
  58.         cout << "[" << tl << " .. " << tr << "] : " << (v ? v->sum : get_sum(tl, tr)) << " | " << (v ? 1 : 0) << "\n";
  59.     }
  60. }
  61.  
  62. int main() {
  63.  
  64.     scanf("%d %d", &n, &m);
  65.  
  66.     for(int pos, val, type, iter = 0;iter < m;iter++) {
  67.         scanf("%d", &type);
  68.         if(type == 1) {
  69.             scanf("%d %d", &pos, &val);
  70.             put(t, 0, n - 1, pos, 1ll * len * val);
  71.         }else {
  72.             len <<= 1;
  73.             n >>= 1;
  74.         }
  75.         //show(t, 0, n - 1);
  76.         printf("%.10lf\n", 1.0 * (t ? t->sum : get_sum(0, n - 1)) / len);
  77.     }
  78.  
  79.     return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement