#include <bits/stdc++.h>
using namespace std;
const int mod = 1000000007;
const int N = 300010;
const int INF = 0x3f3f3f3f;
void MOD(long long &a) {
  if (a >= mod) a -= mod;
}
void MOD(long long &a, long long c) {
  if (a >= c) a -= c;
}
void ADD(long long &a, long long b) {
  a += b;
  MOD(a);
}
void ADD(long long &a, long long b, long long c) {
  a += b;
  MOD(a, c);
}
long long qpow(long long a, long long b) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans = ans * a % mod;
    a = a * a % mod;
    b /= 2;
  }
  return ans;
}
long long qpow(long long a, long long b, long long c) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans = ans * a % c;
    a = a * a % c;
    b /= 2;
  }
  return ans;
}
int n, m, a[N];
long long b[N];
int lefneg[N << 2], rigpos[N << 2], lefmax[N << 2], rigmax[N << 2], ans[N << 2];
void update(int l, int r, int rt) {
  int m = l + r >> 1;
  lefneg[rt] = lefneg[rt << 1] == (m - l + 1)
                   ? lefneg[rt << 1] + lefneg[rt << 1 | 1]
                   : lefneg[rt << 1];
  rigpos[rt] = rigpos[rt << 1 | 1] == (r - m)
                   ? rigpos[rt << 1 | 1] + rigpos[rt << 1]
                   : rigpos[rt << 1 | 1];
  ans[rt] = max(max(ans[rt << 1], ans[rt << 1 | 1]),
                max(lefmax[rt << 1 | 1] + rigpos[rt << 1],
                    rigmax[rt << 1] + lefneg[rt << 1 | 1]));
  if (lefmax[rt << 1] == (m - l + 1) && rigpos[rt << 1] == (m - l + 1))
    lefmax[rt] =
        lefmax[rt << 1] + max(lefmax[rt << 1 | 1], lefneg[rt << 1 | 1]);
  else if (lefmax[rt << 1] == (m - l + 1))
    lefmax[rt] = lefmax[rt << 1] + lefneg[rt << 1 | 1];
  else
    lefmax[rt] = lefmax[rt << 1];
  if (rigmax[rt << 1 | 1] == (r - m) && lefneg[rt << 1 | 1] == (r - m))
    rigmax[rt] = rigmax[rt << 1 | 1] + max(rigmax[rt << 1], rigpos[rt << 1]);
  else if (rigmax[rt << 1 | 1] == (r - m))
    rigmax[rt] = rigmax[rt << 1 | 1] + rigpos[rt << 1];
  else
    rigmax[rt] = rigmax[rt << 1 | 1];
  ans[rt] = max(max(lefmax[rt], rigmax[rt]), ans[rt]);
}
void build(int l, int r, int rt) {
  if (l == r) {
    if (b[l] > 0)
      rigpos[rt] = lefmax[rt] = rigmax[rt] = ans[rt] = 1;
    else if (b[l] < 0)
      lefneg[rt] = lefmax[rt] = rigmax[rt] = ans[rt] = 1;
    return;
  }
  int m = l + r >> 1;
  build(l, m, rt << 1);
  build(m + 1, r, rt << 1 | 1);
  update(l, r, rt);
}
void change(int pos, int val, int l, int r, int rt) {
  if (l == r && pos == l) {
    b[l] += val;
    lefneg[rt] = rigpos[rt] = lefmax[rt] = rigmax[rt] = ans[rt] = 0;
    if (b[l] > 0)
      rigpos[rt] = lefmax[rt] = rigmax[rt] = ans[rt] = 1;
    else if (b[l] < 0)
      lefneg[rt] = lefmax[rt] = rigmax[rt] = ans[rt] = 1;
    return;
  }
  int m = l + r >> 1;
  if (pos <= m)
    change(pos, val, l, m, rt << 1);
  else
    change(pos, val, m + 1, r, rt << 1 | 1);
  update(l, r, rt);
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  n--;
  for (int i = 1; i <= n; i++) b[i] = a[i + 1] - a[i];
  scanf("%d", &m);
  if (n == 0) {
    while (m--) printf("1\n");
    return 0;
  }
  build(1, n, 1);
  while (m--) {
    int l, r, val;
    scanf("%d%d%d", &l, &r, &val);
    if (l - 1 > 0) change(l - 1, val, 1, n, 1);
    if (r <= n) change(r, -val, 1, n, 1);
    printf("%d\n", ans[1] + 1);
  }
}
