func_code_string: #include <bits/stdc++.h>   using namespace std;   using LL = long long;   constexpr int N = 150005;   double x[N], ex[N];   array<double, 4> seg[4 * N];   array<double, 4> merge(const array<double, 4> &l, const array<double, 4> &r) {     array<double, 4> rv;     rv[0] = l[0] + r[0];     rv[1] = max(l[1], l[0] + r[1]);     rv[2] = max(r[2], r[0] + l[2]);     rv[3] = max({l[3], r[3], l[2] + r[1]});     return rv;   }   void build(int at, int b, int e) {     if (b == e) {       seg[at][0] = ex[b];       seg[at][1] = seg[at][2] = seg[at][3] = max(0., ex[b]);       return;     }     build(at * 2, b, ((b + e) / 2));     build(at * 2 + 1, ((b + e) / 2) + 1, e);     seg[at] = merge(seg[at * 2], seg[at * 2 + 1]);   }   array<double, 4> query(int at, int b, int e, int l, int r) {     if (e < l or r < b) return array<double, 4>();     if (l <= b and e <= r) {       return seg[at];     }     auto q1 = query(at * 2, b, ((b + e) / 2), l, r);     auto q2 = query(at * 2 + 1, ((b + e) / 2) + 1, e, l, r);     return merge(q1, q2);   }   int main() {     ios::sync_with_stdio(false);     cin.tie(nullptr);     int n, m, c;     cin >> n >> m >> c;     for (int i = 1; i <= n; i++) cin >> x[i];     for (int i = 1; i < n; i++) {       double p;       cin >> p;       ex[i] = (x[i + 1] - x[i]) * .5 - p * c / 100.0;     }     build(1, 1, n - 1);     double result = 0;     while (m--) {       int l, r;       cin >> l >> r;       auto res = query(1, 1, n - 1, l, r - 1);       result += res[3];     }     cout << setprecision(10) << result << endl;   }   