func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 150000;   struct node {     long long l, r, sm, mx;   } tr[4 * maxn];   inline node comb(node ll, node rr) {     node ret;     ret.l = max(ll.l, ll.sm + rr.l);     ret.r = max(rr.r, rr.sm + ll.r);     ret.sm = ll.sm + rr.sm;     ret.mx = max(max(ll.mx, rr.mx), ll.r + rr.l);     return ret;   }   inline void pushup(int o) { tr[o] = comb(tr[o * 2], tr[o * 2 + 1]); }   long long a[maxn];   void build(int o, int l, int r) {     if (l == r) {       tr[o].l = tr[o].r = tr[o].sm = tr[o].mx = a[l];       return;     }     build(o * 2, l, (l + r) / 2);     build(o * 2 + 1, (l + r) / 2 + 1, r);     pushup(o);   }   node query(int o, int l, int r, int ql, int qr) {     if (ql <= l && qr >= r) return tr[o];     if (qr <= (l + r) / 2) return query(o * 2, l, (l + r) / 2, ql, qr);     if (ql > (l + r) / 2) return query(o * 2 + 1, (l + r) / 2 + 1, r, ql, qr);     node ll = query(o * 2, l, (l + r) / 2, ql, qr),          rr = query(o * 2 + 1, (l + r) / 2 + 1, r, ql, qr);     return comb(ll, rr);   }   long long b[maxn];   int main() {     long long n, q, c;     scanf( %lld%lld%lld , &n, &q, &c);     long long x;     scanf( %lld , &x);     n--;     for (int i = 1; i <= n; i++) scanf( %lld , b + i);     for (int i = 1; i <= n; i++) {       scanf( %lld , &x);       a[i] = (b[i] - b[i - 1]) * 50 - c * x;     }     build(1, 1, n);     long long ans = 0;     while (q--) {       long long l, r;       scanf( %lld%lld , &l, &r);       r--;       node tmp = query(1, 1, n, l, r);       ans += max(tmp.mx, 0LL);     }     cout << fixed << setprecision(9) << 0.01 * ans << endl;   }   