Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define vec vector
- #define ALL(x) (x).begin(), (x).end()
- typedef long long ll;
- typedef pair< int, int > pii;
- int const inf = 1000 * 1000 * 1000;
- inline ll ar(ll l, ll r) {
- return (l + r) * (r - l + 1) / 2;
- }
- int n, m, len = 1;
- struct Node {
- Node * l, * r;
- ll sum;
- Node() : l(0), r(0), sum(0) { }
- } * t;
- ll get_sum(int tl, int tr) {
- return ar(1ll * tl * len, 1ll * tr * len + len - 1);
- }
- void up(Node *& v, int tl, int tm, int tr) {
- v->sum = 0;
- if(v->l) v->sum += v->l->sum;
- else v->sum += get_sum(tl, tm);
- if(v->r) v->sum += v->r->sum;
- else v->sum += get_sum(tm + 1, tr);
- }
- void put(Node *& v, int tl, int tr, int pos, ll val) {
- if(!v) {
- v = new Node();
- v->sum = get_sum(tl, tr);
- }
- if(tl == tr) {
- v->sum = val;
- }else {
- int tm = (tl + tr) >> 1;
- if(pos <= tm) put(v->l, tl, tm, pos, val);
- else put(v->r, tm + 1, tr, pos, val);
- up(v, tl, tm, tr);
- }
- }
- void show(Node * v, int tl, int tr) {
- if(tl < tr) {
- int tm = (tl + tr) >> 1;
- show(v ? v->l : 0, tl, tm);
- show(v ? v->r : 0, tm + 1, tr);
- }else {
- cout << "[" << tl << " .. " << tr << "] : " << (v ? v->sum : get_sum(tl, tr)) << " | " << (v ? 1 : 0) << "\n";
- }
- }
- int main() {
- scanf("%d %d", &n, &m);
- for(int pos, val, type, iter = 0;iter < m;iter++) {
- scanf("%d", &type);
- if(type == 1) {
- scanf("%d %d", &pos, &val);
- put(t, 0, n - 1, pos, 1ll * len * val);
- }else {
- len <<= 1;
- n >>= 1;
- }
- //show(t, 0, n - 1);
- printf("%.10lf\n", 1.0 * (t ? t->sum : get_sum(0, n - 1)) / len);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement