func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long N = 3e5 + 55;   const long long mod = 1000000007;   double add[N << 2], sum[N << 2];   struct node {     int pos, h, l, r;   } a[N];   map<int, int> b;   vector<int> v, v2;   int getid(int x) { return lower_bound(v.begin(), v.end(), x) - v.begin() + 1; }   int get_id(int x) { return upper_bound(v.begin(), v.end(), x) - v.begin() + 1; }   int getid2(int x) {     return lower_bound(v2.begin(), v2.end(), x) - v2.begin() + 1;   }   void PushUp(int rt) { sum[rt] = sum[rt << 1] + sum[rt << 1 | 1]; }   void PushDown(int rt, int m, int l, int r) {     if (fabs(add[rt] - 1) > 0.00001) {       add[rt << 1] *= add[rt];       add[rt << 1 | 1] *= add[rt];       sum[rt << 1] *= add[rt];       sum[rt << 1 | 1] *= add[rt];       add[rt] = 1;     }   }   void build(int l, int r, int rt) {     add[rt] = 1;     sum[rt] = 0;     if (l == r) {       if (v2[getid2(v[l - 1]) - 1] == v[l - 1]) {         sum[rt] = b[v[l - 1]];       } else         sum[rt] = 0;       return;     }     int m = (l + r) >> 1;     build(l, m, rt << 1);     build(m + 1, r, rt << 1 | 1);     PushUp(rt);   }   void upedit(int L, int R, double c, int l, int r, int rt) {     if (L <= l && r <= R) {       add[rt] *= c;       sum[rt] *= c;       return;     }     int m = (l + r) >> 1;     PushDown(rt, m, l, r);     if (L <= m) upedit(L, R, c, l, m, rt << 1);     if (m < R) upedit(L, R, c, m + 1, r, rt << 1 | 1);     PushUp(rt);   }   double query(int L, int R, int l, int r, int rt) {     if (L <= l && r <= R) {       return sum[rt];     }     int m = (l + r) >> 1;     PushDown(rt, m, l, r);     double ret = 0;     if (L <= m) ret += query(L, R, l, m, rt << 1);     if (m < R) ret += query(L, R, m + 1, r, rt << 1 | 1);     return ret;   }   int main() {     ios::sync_with_stdio(false), cin.tie(0);     int n, m, k, kk;     cin >> n >> m;     for (int i = 1; i <= n; i++) {       cin >> a[i].pos >> a[i].h >> a[i].l >> a[i].r;       v.push_back(a[i].pos);       v.push_back(a[i].pos + a[i].h);       v.push_back(a[i].pos - a[i].h);     }     for (int i = 1; i <= m; i++) {       cin >> k >> kk, v.push_back(k), v2.push_back(k);       b[k] += kk;     }     sort(v.begin(), v.end()), v.erase(unique(v.begin(), v.end()), v.end());     sort(v2.begin(), v2.end()), v2.erase(unique(v2.begin(), v2.end()), v2.end());     int sz = v.size();     build(1, sz, 1);     for (int i = 1; i <= n; i++) {       int L = getid(a[i].pos - a[i].h);       int R = get_id(a[i].pos + a[i].h) - 1;       int M = getid(a[i].pos);       if (L < M) {         upedit(L, M - 1, 1 - a[i].l * 1.0 / 100, 1, sz, 1);       }       if (R > M) {         upedit(M + 1, R, 1 - a[i].r * 1.0 / 100, 1, sz, 1);       }     }     printf( %.5f n , sum[1]);     return 0;   }   