#include <bits/stdc++.h>
using namespace std;
inline int Get(long long x) { return x ? x > 0 ?: -1 : 0; }
long long a[300000 + 1];
const int maxm = 12e5 + 10;
long long Lm[maxm], Rm[maxm];
int mx[maxm], Lmax[maxm], Rmax[maxm], tot[maxm];
void Up(int rt) {
  int ls = rt << 1, rs = ls | 1;
  mx[rt] = max(mx[ls], mx[rs]);
  Lm[rt] = Lm[ls];
  Rm[rt] = Rm[rs];
  if (!Rm[ls] || !Lm[rs] || Get(Rm[ls]) < Get(Lm[rs])) {
    Lmax[rt] = Lmax[ls];
    Rmax[rt] = Rmax[rs];
  } else {
    Lmax[rt] = (mx[ls] == tot[ls]) ? Lmax[ls] + Lmax[rs] : Lmax[ls];
    Rmax[rt] = (mx[rs] == tot[rs]) ? Rmax[rs] + Rmax[ls] : Rmax[rs];
    mx[rt] = max(mx[rt], Rmax[ls] + Lmax[rs]);
  }
}
void Build(int rt, int l, int r) {
  if (l == r)
    return Lm[rt] = Rm[rt] = a[l], tot[rt] = 1,
           Lmax[rt] = Rmax[rt] = mx[rt] = (Lm[rt] != 0), void();
  int mid = l + r >> 1;
  Build(rt << 1, l, mid);
  Build(rt << 1 | 1, mid + 1, r);
  tot[rt] = r - l + 1;
  Up(rt);
}
void modify(int rt, int l, int r, int x, long long y) {
  if (l == r)
    return Lm[rt] += y, Rm[rt] += y,
           tot[rt] = 1, mx[rt] = Lmax[rt] = Rmax[rt] = (Lm[rt] != 0), void();
  int mid = l + r >> 1;
  if (x <= mid)
    modify(rt << 1, l, mid, x, y);
  else
    modify(rt << 1 | 1, mid + 1, r, x, y);
  Up(rt);
}
int main() {
  int n, m;
  scanf("%d", &n);
  int pre, cur;
  scanf("%d", &pre);
  for (int i = 1; i < n; ++i) {
    scanf("%d", &cur);
    a[i] = cur - pre;
    pre = cur;
  }
  n--;
  if (n) Build(1, 1, n);
  scanf("%d", &m);
  for (int i = 0; i < m; ++i) {
    static int l, r, d;
    scanf("%d%d%d", &l, &r, &d);
    if (l >= 2) modify(1, 1, n, l - 1, d);
    if (r <= n) modify(1, 1, n, r, -d);
    printf("%d\n", mx[1] + 1);
  }
  return 0;
}
