#include <bits/stdc++.h>
using namespace std;
ifstream fin(".in");
ofstream fout(".out");
struct nod {
  long long int best, suf, pre;
} tree[1200000];
long long int sgn[300010], v[300010], i, j, q, a, b, n, val;
int fmm1, fmm2, fmm3;
__attribute__((always_inline)) long long int sign(long long int x);
long long int sign(long long int x) {
  if (x > 0) return 1;
  if (x < 0) return -1;
  return 0;
}
nod unite(nod a, nod b, int left, int right) {
  int middle = (left + right) / 2;
  nod ans;
  ans.best = max(a.best, b.best);
  if (sign(sgn[middle]) >= sign(sgn[middle + 1]))
    ans.best = max(ans.best, a.suf + b.pre);
  ans.pre = a.pre;
  if (a.pre == middle - left + 1 && sign(sgn[middle]) >= sign(sgn[middle + 1]))
    ans.pre = a.pre + b.pre;
  ans.suf = b.suf;
  if (b.suf == right - middle && sign(sgn[middle]) >= sign(sgn[middle + 1]))
    ans.suf = a.suf + b.suf;
  return ans;
}
void build(int node, int left, int right) {
  int middle = (left + right) / 2;
  if (left == right) {
    if (sgn[left] == 0)
      tree[node] = {0, 0, 0};
    else
      tree[node] = {1, 1, 1};
    return;
  }
  build(2 * node, left, middle);
  build(2 * node + 1, middle + 1, right);
  tree[node] = unite(tree[2 * node], tree[2 * node + 1], left, right);
}
void update(int node, int left, int right, int poz, int val) {
  if (poz < left || poz > right) return;
  int middle = (left + right) / 2;
  if (left == right) {
    sgn[poz] += val;
    if (sgn[poz] == 0)
      tree[node] = {0, 0, 0};
    else
      tree[node] = {1, 1, 1};
    return;
  }
  if (poz <= middle)
    update(2 * node, left, middle, poz, val);
  else
    update(2 * node + 1, middle + 1, right, poz, val);
  tree[node] = unite(tree[2 * node], tree[2 * node + 1], left, right);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> fmm1;
  n = fmm1;
  for (i = 1; i <= n; i++) {
    cin >> fmm1;
    v[i] = fmm1;
  }
  for (i = 1; i < n; i++) sgn[i] = v[i + 1] - v[i];
  if (n == 1) {
    cin >> q;
    while (q--) cout << "1\n";
    return 0;
  }
  build(1, 1, n - 1);
  cin >> fmm1;
  q = fmm1;
  for (i = 1; i <= q; i++) {
    cin >> fmm1 >> fmm2 >> fmm3;
    a = fmm1;
    b = fmm2;
    val = fmm3;
    update(1, 1, n - 1, a - 1, val);
    update(1, 1, n - 1, b, -val);
    fmm1 = tree[1].best + 1;
    cout << fmm1 << '\n';
  }
  return 0;
}
