#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 10;
int n, m;
long long a[N];
struct Segment {
  int l, r, len;
  int inc, dec, lans, rans, ans;
  long long tag, lv, rv;
} t[N << 2];
void pushup(int x) {
  t[x].lv = t[x << 1].lv, t[x].rv = t[x << 1 | 1].rv;
  t[x].inc = t[x << 1 | 1].inc;
  if (t[x << 1 | 1].inc == t[x << 1 | 1].len && t[x << 1 | 1].lv > t[x << 1].rv)
    t[x].inc += t[x << 1].inc;
  t[x].dec = t[x << 1].dec;
  if (t[x << 1].dec == t[x << 1].len && t[x << 1].rv > t[x << 1 | 1].lv)
    t[x].dec += t[x << 1 | 1].dec;
  t[x].lans = t[x << 1].lans;
  if (t[x << 1].inc == t[x << 1].len) {
    if (t[x << 1].rv < t[x << 1 | 1].lv) t[x].lans += t[x << 1 | 1].lans;
    if (t[x << 1].rv > t[x << 1 | 1].lv) t[x].lans += t[x << 1 | 1].dec;
  } else if (t[x << 1].lans == t[x << 1].len && t[x << 1].rv > t[x << 1 | 1].lv)
    t[x].lans += t[x << 1 | 1].dec;
  t[x].rans = t[x << 1 | 1].rans;
  if (t[x << 1 | 1].dec == t[x << 1 | 1].len) {
    if (t[x << 1 | 1].lv < t[x << 1].rv) t[x].rans += t[x << 1].rans;
    if (t[x << 1 | 1].lv > t[x << 1].rv) t[x].rans += t[x << 1].inc;
  } else if (t[x << 1 | 1].rans == t[x << 1 | 1].len &&
             t[x << 1 | 1].lv > t[x << 1].rv)
    t[x].rans += t[x << 1].inc;
  t[x].ans = max(t[x << 1].ans, t[x << 1 | 1].ans);
  if (t[x << 1].rv < t[x << 1 | 1].lv)
    t[x].ans = max(t[x].ans, t[x << 1].inc + t[x << 1 | 1].lans);
  if (t[x << 1].rv > t[x << 1 | 1].lv)
    t[x].ans = max(t[x].ans, t[x << 1 | 1].dec + t[x << 1].rans);
}
void pushdown(int x) {
  if (!t[x].tag) return;
  t[x << 1].lv += t[x].tag, t[x << 1].rv += t[x].tag;
  t[x << 1 | 1].lv += t[x].tag, t[x << 1 | 1].rv += t[x].tag;
  t[x << 1].tag += t[x].tag, t[x << 1 | 1].tag += t[x].tag;
  t[x].tag = 0;
}
void build(int x, int l, int r) {
  t[x].l = l, t[x].r = r, t[x].len = r - l + 1;
  t[x].lv = a[l], t[x].rv = a[r];
  if (l == r) {
    t[x].inc = t[x].dec = t[x].lans = t[x].rans = t[x].ans = 1;
    return;
  }
  int mid = (l + r) >> 1;
  build(x << 1, l, mid);
  build(x << 1 | 1, mid + 1, r);
  pushup(x);
}
void update(int x, int l, int r, long long val) {
  if (l <= t[x].l && t[x].r <= r) {
    t[x].lv += val, t[x].rv += val, t[x].tag += val;
    return;
  }
  pushdown(x);
  if (l <= t[x << 1].r) update(x << 1, l, r, val);
  if (t[x << 1 | 1].l <= r) update(x << 1 | 1, l, r, val);
  pushup(x);
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%lld", &a[i]);
  build(1, 1, n);
  scanf("%d", &m);
  for (int i = 1; i <= m; i++) {
    int l, r;
    long long d;
    scanf("%d%d%lld", &l, &r, &d);
    update(1, l, r, d);
    printf("%d\n", t[1].ans);
  }
  return 0;
}
