#include <bits/stdc++.h>
using namespace std;
const int mo = 1e9 + 7;
const int INF = 0x3f3f3f3f;
template <typename _T>
void read(_T &x) {
  _T f = 1;
  x = 0;
  char s = getchar();
  while ('0' > s || '9' < s) {
    if (s == '-') f = -1;
    s = getchar();
  }
  while ('0' <= s && s <= '9') {
    x = (x << 3) + (x << 1) + (s ^ 48);
    s = getchar();
  }
  x *= f;
}
int n, m;
long long a[300005];
struct tree {
  int maxx, ul, ur, dl, dr, ml, mr, len, L, R;
} tr[300005 << 2];
int Max(int x, int y) { return x > y ? x : y; }
void pushup(int rt) {
  int lson = rt << 1, rson = rt << 1 | 1;
  tr[rt].maxx = Max(tr[lson].maxx, tr[rson].maxx);
  tr[rt].dl = tr[lson].dl;
  tr[rt].ul = tr[lson].ul;
  tr[rt].dr = tr[rson].dr;
  tr[rt].ur = tr[rson].ur;
  tr[rt].ml = tr[lson].ml;
  tr[rt].mr = tr[rson].mr;
  if (a[tr[rson].L] > 0) {
    tr[rt].maxx = Max(tr[rt].maxx, tr[lson].ur + tr[rson].ml);
    if (tr[lson].dl == tr[lson].len)
      tr[rt].dl += tr[rson].dl, tr[rt].ml = tr[lson].dl + tr[rson].ml;
    if (tr[rson].ur == tr[rson].len) tr[rt].ur += tr[lson].ur;
    if (tr[rson].mr == tr[rson].len) tr[rt].mr += tr[lson].ur;
  }
  if (a[tr[rson].L] < 0) {
    tr[rt].maxx = Max(tr[rt].maxx, tr[lson].mr + tr[rson].ul);
    if (tr[lson].ul == tr[lson].len) tr[rt].ul += tr[rson].ul;
    if (tr[lson].ml == tr[lson].len) tr[rt].ml += tr[rson].ul;
    if (tr[rson].dr == tr[rson].len)
      tr[rt].dr += tr[lson].dr, tr[rt].mr = tr[rson].dr + tr[lson].mr;
  }
}
void build(int rt, int l, int r) {
  tr[rt].L = l;
  tr[rt].R = r;
  tr[rt].len = r - l + 1;
  if (l == r) {
    tr[rt].maxx = 1;
    tr[rt].dl = tr[rt].ml = tr[rt].ul = 1;
    tr[rt].dr = tr[rt].mr = tr[rt].ur = 1;
    return;
  }
  int mid = l + r >> 1;
  build(rt << 1, l, mid);
  build(rt << 1 | 1, mid + 1, r);
  pushup(rt);
}
void insert(int rt, int l, int r, int ai, long long aw) {
  if (l > r || l > ai || r < ai) return;
  int mid = l + r >> 1;
  if (l == r) {
    a[ai] += aw;
    return;
  }
  if (ai <= mid) insert(rt << 1, l, mid, ai, aw);
  if (ai > mid) insert(rt << 1 | 1, mid + 1, r, ai, aw);
  pushup(rt);
}
signed main() {
  read(n);
  for (int i = 1; i <= n; i++) read(a[i]);
  for (int i = n; i > 0; i--) a[i] = a[i] - a[i - 1];
  a[1] = 0;
  build(1, 1, n);
  read(m);
  for (int i = 1; i <= m; i++) {
    int l, r;
    long long d;
    read(l);
    read(r);
    read(d);
    if (l != 1) insert(1, 1, n, l, d);
    if (r != n) insert(1, 1, n, r + 1, -d);
    printf("%d\n", tr[1].maxx);
  }
  return 0;
}
