#include <bits/stdc++.h>
using namespace std;
const int MAXN = 3e5 + 10;
struct node {
  long long l, r, fg;
  int ld, rd, lu, ru, sz, wid;
} nd[MAXN << 2];
int a[MAXN], n, m;
void pushup(int o) {
  bool g1 = nd[o << 1].r > nd[o << 1 | 1].l,
       g2 = nd[o << 1].r < nd[o << 1 | 1].l;
  if (nd[o << 1].ld == nd[o << 1].sz && g1)
    nd[o].ld = nd[o << 1].sz + nd[o << 1 | 1].ld;
  else
    nd[o].ld = nd[o << 1].ld;
  if (nd[o << 1 | 1].rd == nd[o << 1 | 1].sz && g2)
    nd[o].rd = nd[o << 1 | 1].sz + nd[o << 1].rd;
  else
    nd[o].rd = nd[o << 1 | 1].rd;
  if (nd[o << 1].lu == nd[o << 1].sz) {
    if (nd[o << 1].rd == nd[o << 1].sz) {
      if (g1)
        nd[o].lu = nd[o << 1].sz + nd[o << 1 | 1].ld;
      else if (g2)
        nd[o].lu = nd[o << 1].sz + nd[o << 1 | 1].lu;
      else
        nd[o].lu = nd[o << 1].sz;
    } else {
      if (g1)
        nd[o].lu = nd[o << 1].sz + nd[o << 1 | 1].ld;
      else
        nd[o].lu = nd[o << 1].sz;
    }
  } else
    nd[o].lu = nd[o << 1].lu;
  if (nd[o << 1 | 1].ru == nd[o << 1 | 1].sz) {
    if (nd[o << 1 | 1].ld == nd[o << 1 | 1].sz) {
      if (g1)
        nd[o].ru = nd[o << 1 | 1].sz + nd[o << 1].ru;
      else if (g2)
        nd[o].ru = nd[o << 1 | 1].sz + nd[o << 1].rd;
      else
        nd[o].ru = nd[o << 1 | 1].sz;
    } else {
      if (g2)
        nd[o].ru = nd[o << 1 | 1].sz + nd[o << 1].rd;
      else
        nd[o].ru = nd[o << 1 | 1].sz;
    }
  } else
    nd[o].ru = nd[o << 1 | 1].ru;
  nd[o].l = nd[o << 1].l;
  nd[o].r = nd[o << 1 | 1].r;
  nd[o].wid = max(nd[o << 1].wid, nd[o << 1 | 1].wid);
  if (g1) nd[o].wid = max(nd[o].wid, nd[o << 1].ru + nd[o << 1 | 1].ld);
  if (g2) nd[o].wid = max(nd[o].wid, nd[o << 1 | 1].lu + nd[o << 1].rd);
}
void pushdown(int o) {
  if (nd[o].fg) {
    nd[o << 1].l += nd[o].fg;
    nd[o << 1].r += nd[o].fg;
    nd[o << 1].fg += nd[o].fg;
    nd[o << 1 | 1].l += nd[o].fg;
    nd[o << 1 | 1].r += nd[o].fg;
    nd[o << 1 | 1].fg += nd[o].fg;
    nd[o].fg = 0;
  }
}
void build(int l, int r, int o) {
  nd[o].sz = r - l + 1;
  nd[o].fg = 0;
  nd[o].l = a[l];
  nd[o].r = a[r];
  if (l == r) {
    nd[o].ld = nd[o].rd = nd[o].lu = nd[o].ru = nd[o].wid = 1;
  } else {
    int mid = (l + r) >> 1;
    build(l, mid, o << 1);
    build(mid + 1, r, o << 1 | 1);
    pushup(o);
  }
}
void modify(int l, int r, int o, int ql, int qr, int val) {
  if (ql <= l && r <= qr) {
    nd[o].l += val;
    nd[o].r += val;
    nd[o].fg += val;
    return;
  }
  pushdown(o);
  int mid = (l + r) >> 1;
  if (ql <= mid) modify(l, mid, o << 1, ql, qr, val);
  if (qr > mid) modify(mid + 1, r, o << 1 | 1, ql, qr, val);
  pushup(o);
}
int main() {
  while (scanf("%d", &n) == 1) {
    for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
    build(1, n, 1);
    scanf("%d", &m);
    for (int i = 0, l, r, v; i < m; i++) {
      scanf("%d%d%d", &l, &r, &v);
      modify(1, n, 1, l, r, v);
      printf("%d\n", nd[1].wid);
    }
  }
  return 0;
}
