func_code_string: #include <bits/stdc++.h>   using namespace std;   long long a[300005];   int sign(long long x) { return x > 0 ? 1 : -1; }   struct Node {     int l, r, lx, mx, rx;     void up(Node L, Node R) {       lx = L.lx;       rx = R.rx;       mx = max(L.mx, R.mx);       if (a[L.r] && a[R.l] && sign(a[L.r]) >= sign(a[R.l])) {         mx = max(mx, L.rx + R.lx);         if (L.mx == L.r - L.l + 1) lx = L.mx + R.lx;         if (R.mx == R.r - R.l + 1) rx = R.mx + L.rx;       }       mx = max({mx, lx, rx});     }   } seg[300005 * 4];   void update(int qx, int c, int l, int r, int i) {     seg[i] = {l, r};     if (l == r) {       a[qx] += c;       if (a[qx] != 0)         seg[i] = {l, r, 1, 1, 1};       else         seg[i] = {l, r, 0, 0, 0};       return;     }     int mid = (l + r) / 2;     if (qx <= mid)       update(qx, c, l, mid, i * 2);     else       update(qx, c, mid + 1, r, i * 2 + 1);     seg[i].up(seg[i * 2], seg[i * 2 + 1]);   }   int main() {     int n;     scanf( %d , &n);     for (int i = 1; i <= n; ++i) scanf( %I64d , &a[i]);     for (int i = 1; i < n; ++i) a[i] = a[i + 1] - a[i];     for (int i = 1; i < n; ++i) update(i, 0, 1, n - 1, 1);     int Q;     scanf( %d , &Q);     while (Q--) {       int l, r, x;       scanf( %d%d%d , &l, &r, &x);       if (l > 1) update(l - 1, x, 1, n - 1, 1);       if (r < n) update(r, -x, 1, n - 1, 1);       printf( %d n , seg[1].mx + 1);     }   }   