#include <bits/stdc++.h>   using namespace std;   vector<long long> a;   struct SegTree {     struct Node {       long long left, right, mid, size;     };     Node combine(const Node& A, const Node& B, long long m) {       Node C;       if (A.left < A.size) {         C.left = A.left;       } else {         if ((a[m - 1] > 0) <= (a[m] > 0)) {           C.left = A.size + B.left;         } else {           C.left = A.size;         }       }       if (B.right < B.size) {         C.right = B.right;       } else {         if ((a[m - 1] > 0) <= (a[m] > 0)) {           C.right = B.size + A.right;         } else {           C.right = B.size;         }       }       C.mid = max(A.mid, B.mid);       if ((a[m - 1] > 0) <= (a[m] > 0)) {         C.mid = max(C.mid, A.right + B.left);       }       C.size = A.size + B.size;       return C;     }     long long size;     vector<Node> t;     void init(long long n) {       size = n;       t.resize(4 * size);     }     void build(long long x, long long lx, long long rx) {       if (lx + 1 == rx) {         if (a[lx] == 0) {           t[x] = {0, 0, 0, 1};         } else {           t[x] = {1, 1, 1, 1};         }       } else {         long long m = (lx + rx) / 2;         build(2 * x + 1, lx, m);         build(2 * x + 2, m, rx);         t[x] = combine(t[2 * x + 1], t[2 * x + 2], m);       }     }     void build(long long n) {       init(n);       build(0, 0, size);     }     void set(long long v, long long x, long long lx, long long rx) {       if (lx + 1 == rx) {         if (a[lx] == 0) {           t[x] = {0, 0, 0, 1};         } else {           t[x] = {1, 1, 1, 1};         }       } else {         long long m = (lx + rx) / 2;         if (v < m) {           set(v, 2 * x + 1, lx, m);         } else {           set(v, 2 * x + 2, m, rx);         }         t[x] = combine(t[2 * x + 1], t[2 * x + 2], m);       }     }     void set(long long v) { set(v, 0, 0, size); }   };   void solve() {     long long Q;     Q = 1;     while (Q--) {       long long n;       cin >> n;       vector<long long> b(n);       for (long long i = 0; i < n; ++i) cin >> b[i];       ;       a.resize(n - 1);       for (long long i = 0; i < n - 1; ++i) {         a[i] = b[i] - b[i + 1];       }       SegTree tree;       if (a.size() != 0) {         tree.build(a.size());       }       long long m;       cin >> m;       while (m--) {         long long l, r, d;         cin >> l >> r >> d;         --l, --r;         if (a.size() == 0) {           cout << 1 <<    ;           continue;         }         if (l > 0) {           a[l - 1] -= d;           tree.set(l - 1);         }         if (r < a.size()) {           a[r] += d;           tree.set(r);         }         cout << tree.t[0].mid + 1 <<    ;       }     }   }   signed main(signed argc, char** argv) {     ios_base::sync_with_stdio(false);     cin.tie(nullptr);     if (argc > 1 && (string)argv[1] ==  local ) {       freopen( input.txt ,  r , stdin);       freopen( output.txt ,  w , stdout);       solve();       while (cin.peek() != EOF) {         if (isspace(cin.peek()))           cin.get();         else {           cout <<   n ;           solve();         }       }     } else {       solve();     }   }