#include <bits/stdc++.h>
using namespace std;
const int N = 4e5;
struct node {
  int ans, lu, ru, ld, rd, lm, rm, len;
  long long l, r;
} t[4 * N];
int n, m, l, r;
long long d, p[N], add[4 * N];
node operator+(node a, node b) {
  node res;
  res.l = a.l, res.r = b.r, res.len = a.len + b.len;
  res.lu = a.lu, res.ld = a.ld;
  if (a.lu == a.len && a.r < b.l) res.lu += b.lu;
  if (a.ld == a.len && a.r > b.l) res.ld += b.ld;
  res.ru = b.ru, res.rd = b.rd;
  if (b.ru == b.len && a.r > b.l) res.ru += a.ru;
  if (b.rd == b.len && a.r < b.l) res.rd += a.rd;
  res.lm = a.lm;
  if (a.lm == a.len && a.r > b.l) res.lm += b.ld;
  if (a.lu == a.len && a.r < b.l) res.lm = a.lu + b.lm;
  res.rm = b.rm;
  if (b.rm == b.len && a.r < b.l) res.rm += a.rd;
  if (b.ru == b.len && a.r > b.l) res.rm = a.rm + b.ru;
  int val = 0;
  if (a.r > b.l) val = max(val, a.rm + b.ld);
  if (a.r < b.l) val = max(val, a.rd + b.lm);
  res.ans = max(max(a.ans, b.ans), val);
  return res;
}
void init(int v, int tl, int tr) {
  if (tr - tl == 1) {
    t[v] = {1, 1, 1, 1, 1, 1, 1, 1, p[tl], p[tl]};
    return;
  }
  int mid = (tl + tr) >> 1;
  init((v << 1) + 1, tl, mid);
  init((v << 1) + 2, mid, tr);
  t[v] = t[(v << 1) + 1] + t[(v << 1) + 2];
}
void update(int v, int tl, int tr) {
  if (r <= tl || l >= tr) return;
  if (l <= tl && tr <= r) {
    t[v].l += d;
    t[v].r += d;
    add[v] += d;
    return;
  }
  int mid = (tl + tr) >> 1;
  update((v << 1) + 1, tl, mid);
  update((v << 1) + 2, mid, tr);
  t[v] = t[(v << 1) + 1] + t[(v << 1) + 2];
  t[v].l += add[v];
  t[v].r += add[v];
}
signed main() {
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) scanf("%I64d", &p[i]);
  init(0, 0, n);
  scanf("%d", &m);
  for (int i = 0; i < m; ++i) {
    scanf("%d%d%I64d", &l, &r, &d);
    --l;
    update(0, 0, n);
    printf("%d\n", t[0].ans);
  }
  return 0;
}
