#include <bits/stdc++.h>
using namespace std;
static long long s[1 << 20];
struct str {
  int ans;
  int p1, p2;
  int u1, u2;
  int l1, l2;
  int r1, r2;
  int sz;
  str(void) {
    ans = 0;
    p1 = p2 = u1 = u2 = l1 = l2 = r1 = r2 = 0;
  }
  str(long long v) {
    ans = 1;
    p1 = p2 = u1 = u2 = 0;
    l1 = l2 = r1 = r2 = v != 0;
    if (v > 0)
      p2 = u2 = 1;
    else if (v < 0)
      p1 = u1 = 1;
    sz = 1;
  }
};
str operator+(str a, str b) {
  str c;
  c.ans = max({a.ans, b.ans, a.r1 + b.p2, a.u1 + b.l1});
  c.sz = a.sz + b.sz;
  c.l1 = a.l1;
  c.l2 = a.l2;
  c.r1 = b.r1;
  c.r2 = b.r2;
  if (a.p1 == a.sz)
    c.p1 = a.sz + b.p1, c.l1 = max(c.l1, a.sz + b.l1);
  else
    c.p1 = a.p1;
  if (a.p2 == a.sz)
    c.p2 = a.sz + b.p2, c.l2 = max(c.l2, a.sz + b.l2);
  else
    c.p2 = a.p2;
  if (b.u1 == b.sz)
    c.u1 = a.u1 + b.sz, c.r2 = max(c.r2, a.r2 + b.sz);
  else
    c.u1 = b.u1;
  if (b.u2 == b.sz)
    c.u2 = a.u2 + b.sz, c.r1 = max(c.r1, a.r1 + b.sz);
  else
    c.u2 = b.u2;
  if (a.p1 + a.u2 == a.sz) c.l1 = max(c.l1, a.sz + b.p2);
  if (a.p2 + a.u1 == a.sz) c.l2 = max(c.l2, a.sz + b.p1);
  if (b.p1 + b.u2 == b.sz) c.r1 = max(c.r1, a.u1 + b.sz);
  if (b.p2 + b.u1 == b.sz) c.r2 = max(c.r2, a.u2 + b.sz);
  return c;
}
str t[1 << 20];
void build(int p, int u, int node) {
  if (p == u)
    t[node] = str(s[p]);
  else {
    int m = (p + u) / 2;
    build(p, m, node << 1);
    build(m + 1, u, node << 1 | 1);
    t[node] = t[node << 1] + t[node << 1 | 1];
  }
}
void update(int p, int u, int pos, int node) {
  if (p == u)
    t[node] = str(s[pos]);
  else {
    int m = (p + u) / 2;
    if (pos <= m)
      update(p, m, pos, node << 1);
    else
      update(m + 1, u, pos, node << 1 | 1);
    t[node] = t[node << 1] + t[node << 1 | 1];
  }
}
void write(int p, int u, int node) {
  cerr << p << ' ' << u << ' ' << t[node].ans << ' ' << t[node].p1 << ' '
       << t[node].p2 << ' ' << t[node].u1 << ' ' << t[node].u2 << ' '
       << t[node].l1 << ' ' << t[node].l2 << ' ' << t[node].r1 << ' '
       << t[node].r2 << '\n';
  if (p == u)
    return void(cerr << "s[p]"
                     << " = " << s[p] << '\n');
  int m = (p + u) / 2;
  write(p, m, node << 1);
  write(m + 1, u, node << 1 | 1);
}
int main(void) {
  srand(time(0));
  cout << fixed << setprecision(7);
  cerr << fixed << setprecision(7);
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) scanf("%d", &s[i]);
  for (int i = 1; i < n; ++i) s[i] = s[i] - s[i + 1];
  --n;
  int m;
  scanf("%d", &m);
  if (!n) {
    while (m--) puts("1");
    return 0;
  }
  build(1, n, 1);
  while (m--) {
    int l, r, d;
    scanf("%d%d%d", &l, &r, &d);
    if (l != 1) s[l - 1] -= d, update(1, n, l - 1, 1);
    if (r <= n) s[r] += d, update(1, n, r, 1);
    printf("%d\n", t[1].ans + 1);
  }
  cerr << "Time elapsed :" << clock() * 1000.0 / CLOCKS_PER_SEC << " ms"
       << '\n';
  return 0;
}
