#include <bits/stdc++.h>
using namespace std;
struct node {
  int ans, l, r;
} seg[1200005];
int n;
long long arr[300005];
inline int sgn(long long x) {
  if (x < 0) return -1;
  return x > 0;
}
inline void push_up(int u, int l, int r) {
  int m = l + r >> 1;
  seg[u].ans = max(seg[u << 1].ans, seg[u << 1 | 1].ans);
  if (!arr[m] || !arr[m + 1] || sgn(arr[m]) < sgn(arr[m + 1])) {
    seg[u].l = seg[u << 1].l;
    seg[u].r = seg[u << 1 | 1].r;
    return;
  }
  seg[u].ans = max(seg[u].ans, seg[u << 1].r + seg[u << 1 | 1].l);
  if (seg[u << 1].l == m - l + 1)
    seg[u].l = seg[u << 1].l + seg[u << 1 | 1].l;
  else
    seg[u].l = seg[u << 1].l;
  if (seg[u << 1 | 1].r == r - m)
    seg[u].r = seg[u << 1].r + seg[u << 1 | 1].r;
  else
    seg[u].r = seg[u << 1 | 1].r;
}
void build(int u, int l, int r) {
  if (l == r) {
    seg[u].ans = seg[u].l = seg[u].r = arr[l] != 0;
    return;
  }
  int m = l + r >> 1;
  build(u << 1, l, m);
  build(u << 1 | 1, m + 1, r);
  push_up(u, l, r);
}
void modify(int u, int l, int r, int pos, int x) {
  if (l == r) {
    arr[l] += x;
    seg[u].ans = seg[u].l = seg[u].r = arr[l] != 0;
    return;
  }
  int m = l + r >> 1;
  if (pos <= m)
    modify(u << 1, l, m, pos, x);
  else
    modify(u << 1 | 1, m + 1, r, pos, x);
  push_up(u, l, r);
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%lld", arr + i);
  for (int i = 0; i < n - 1; i++) arr[i] = arr[i + 1] - arr[i];
  if (n != 1) build(1, 0, n - 2);
  int q;
  scanf("%d", &q);
  while (q--) {
    if (n == 1) {
      printf("1\n");
      continue;
    }
    int l, r, d;
    scanf("%d%d%d", &l, &r, &d);
    if (l >= 2) modify(1, 0, n - 2, l - 2, d);
    if (r <= n - 1) modify(1, 0, n - 2, r - 1, -d);
    printf("%d\n", seg[1].ans + 1);
  }
  return 0;
}
