#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long s = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    s = s * 10 + ch - '0';
    ch = getchar();
  }
  return s * f;
}
struct Segment_tedee {
  struct data {
    long long st, ed, tag;
    long long ans;
    long long lans, lup, ldown;
    long long rans, rup, rdown;
  } d[300005 * 4];
  void pushup(long long k, long long l, long long mid, long long r) {
    d[k].st = d[k << 1].st;
    d[k].ed = d[k << 1 | 1].ed;
    d[k].ans = max(d[k << 1].ans, d[k << 1 | 1].ans);
    long long llen = mid - l + 1, rlen = r - mid;
    d[k].lup = d[k << 1].lup;
    d[k].ldown = d[k << 1].ldown;
    d[k].rup = d[k << 1 | 1].rup;
    d[k].rdown = d[k << 1 | 1].rdown;
    d[k].lans = d[k << 1].lans;
    d[k].rans = d[k << 1 | 1].rans;
    if (d[k << 1].ed < d[k << 1 | 1].st) {
      if (d[k << 1].lup == llen) d[k].lup += d[k << 1 | 1].lup;
      if (d[k << 1 | 1].rup == rlen) d[k].rup += d[k << 1].rup;
      if (d[k << 1 | 1].rans == rlen) d[k].rans += d[k << 1].rup;
      if (d[k << 1].lup == llen)
        d[k].lans = max(d[k].lans, llen + d[k << 1 | 1].lans);
      d[k].ans = max(d[k].ans, d[k << 1 | 1].lans + d[k << 1].rup);
    }
    if (d[k << 1].ed > d[k << 1 | 1].st) {
      if (d[k << 1].ldown == llen) d[k].ldown += d[k << 1 | 1].ldown;
      if (d[k << 1 | 1].rdown == rlen) d[k].rdown += d[k << 1].rdown;
      if (d[k << 1].lans == llen) d[k].lans += d[k << 1 | 1].ldown;
      if (d[k << 1 | 1].rdown == rlen)
        d[k].rans = max(d[k].rans, rlen + d[k << 1].rans);
      d[k].ans = max(d[k].ans, d[k << 1].rans + d[k << 1 | 1].ldown);
    }
  }
  void upd(long long k, long long tag) {
    d[k].st += tag;
    d[k].ed += tag;
    d[k].tag += tag;
  }
  void pushdown(long long k) {
    if (!d[k].tag) return;
    upd(k << 1, d[k].tag);
    upd(k << 1 | 1, d[k].tag);
    d[k].tag = 0;
  }
  void build(long long k, long long l, long long r) {
    if (l == r) {
      d[k].st = d[k].ed = read();
      d[k].lup = d[k].rup = d[k].ldown = d[k].rdown = d[k].lans = d[k].rans = 1;
      d[k].ans = 1;
      d[k].tag = 0;
      return;
    }
    long long mid = l + r >> 1;
    build(k << 1, l, mid);
    build(k << 1 | 1, mid + 1, r);
    pushup(k, l, mid, r);
  }
  void add(long long k, long long l, long long r, long long x, long long y,
           long long val) {
    if (x <= l && r <= y) {
      upd(k, val);
      return;
    }
    long long mid = l + r >> 1;
    pushdown(k);
    if (x <= mid) add(k << 1, l, mid, x, y, val);
    if (mid < y) add(k << 1 | 1, mid + 1, r, x, y, val);
    pushup(k, l, mid, r);
  }
} seg;
signed main() {
  long long n = read();
  seg.build(1, 1, n);
  long long m = read();
  for (long long i = 1; i <= m; i++) {
    long long l = read(), r = read(), val = read();
    seg.add(1, 1, n, l, r, val);
    printf("%lld\n", seg.d[1].ans);
  }
  return 0;
}
