#include <bits/stdc++.h>
using namespace std;
struct Node {
  int pref, suf, pref_neg, suf_pos, ans, cant;
  Node() {}
  void init(long long v) {
    if (v < 0) {
      pref = 0;
      suf = 0;
      pref_neg = 1;
      suf_pos = 0;
      ans = 1;
      cant = 1;
    } else if (v > 0) {
      pref = 0;
      suf = 0;
      pref_neg = 0;
      suf_pos = 1;
      ans = 1;
      cant = 1;
    } else {
      pref = 0;
      suf = 0;
      pref_neg = 0;
      suf_pos = 0;
      ans = 0;
      cant = 1;
    }
  }
  void ver() {
    cout << "cant = " << cant << endl
         << "pref = " << pref << endl
         << "suf = " << suf << endl
         << "pref_neg = " << pref_neg << endl
         << "suf_pos = " << suf_pos << endl
         << "ans = " << ans << endl;
  }
  void merge(const Node &a, const Node &b) {
    cant = a.cant + b.cant;
    suf = pref = 0;
    if (a.suf_pos == a.cant && b.pref_neg == b.cant) pref = suf = cant;
    suf = max(suf, b.suf);
    if (b.suf == b.cant) suf += a.suf_pos;
    pref = max(pref, a.pref);
    if (a.pref == a.cant) pref += b.pref_neg;
    suf_pos = b.suf_pos;
    if (b.suf_pos == b.cant) suf_pos += a.suf_pos;
    pref_neg = a.pref_neg;
    if (a.pref_neg == a.cant) pref_neg += b.pref_neg;
    if (b.pref_neg == b.cant) {
      suf = max(suf, a.suf + b.pref_neg);
      suf = max(suf, a.suf_pos + b.pref_neg);
    }
    if (a.suf_pos == a.cant) {
      pref = max(pref, a.suf_pos + b.pref);
      pref = max(pref, a.suf_pos + b.pref_neg);
    }
    ans = max(a.ans, b.ans);
    ans = max(ans, a.suf_pos + b.pref_neg);
    ans = max(ans, a.suf + b.pref_neg);
    ans = max(ans, a.suf_pos + b.pref);
    ans = max(ans, pref);
    ans = max(ans, pref_neg);
    ans = max(ans, suf);
    ans = max(ans, suf_pos);
  }
};
Node T[1050000];
int I, J, V;
long long d[300000];
void init(int id, int L, int R) {
  if (L == R)
    T[id].init(d[L]);
  else {
    int a = id << 1, M = (L + R) >> 1;
    init(a, L, M);
    init(a | 1, M + 1, R);
    T[id].merge(T[a], T[a | 1]);
  }
}
void update(int id, int L, int R) {
  if (L == R) {
    d[L] += V;
    T[id].init(d[L]);
  } else {
    int a = id << 1, M = (L + R) >> 1;
    if (J <= M)
      update(a, L, M);
    else if (I > M)
      update(a | 1, M + 1, R);
    else {
      update(a, L, M);
      update(a | 1, M + 1, R);
    }
    T[id].merge(T[a], T[a | 1]);
  }
}
Node query(int id, int L, int R) {
  if (I <= L && R <= J) return T[id];
  int a = id << 1, M = (L + R) >> 1;
  if (J <= M)
    return query(a, L, M);
  else if (I > M)
    return query(a | 1, M + 1, R);
  else {
    Node ans;
    ans.merge(query(a, L, M), query(a | 1, M + 1, R));
    return ans;
  }
}
int a[300001];
bool valid(int pos) { return (pos <= 9 || (pos > 11 && pos < 14)); }
void verT() {
  cout << "i:       ";
  for (int i = 1; i <= 25; ++i)
    if (valid(i)) printf("%3d", i);
  cout << endl;
  cout << "ans:     ";
  for (int i = 1; i <= 25; ++i)
    if (valid(i)) printf("%3d", T[i].ans);
  cout << endl;
  cout << "pref    :";
  for (int i = 1; i <= 25; ++i)
    if (valid(i)) printf("%3d", T[i].pref);
  cout << endl;
  cout << "pref_neg:";
  for (int i = 1; i <= 25; ++i)
    if (valid(i)) printf("%3d", T[i].pref_neg);
  cout << endl;
  cout << "suf     :";
  for (int i = 1; i <= 25; ++i)
    if (valid(i)) printf("%3d", T[i].suf);
  cout << endl;
  cout << "suf_pos :";
  for (int i = 1; i <= 25; ++i)
    if (valid(i)) printf("%3d", T[i].suf_pos);
  cout << endl;
  cout << "cant    :";
  for (int i = 1; i <= 25; ++i)
    if (valid(i)) printf("%3d", T[i].cant);
  cout << endl;
}
int main(int argc, char const *argv[]) {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) scanf("%d", &a[i]);
  for (int i = 1; i < n; ++i) d[i - 1] = a[i] - a[i - 1];
  if (n > 1) init(1, 0, n - 2);
  I = 0;
  J = n - 2;
  int m, x, y;
  scanf("%d", &m);
  while (m--) {
    scanf("%d %d %d", &x, &y, &V);
    x--;
    y--;
    if (x > 0) {
      J = I = x - 1;
      update(1, 0, n - 2);
    }
    V = -V;
    if (y < n - 1) {
      J = I = y;
      update(1, 0, n - 2);
    }
    I = 0;
    J = n - 2;
    if (n > 1)
      printf("%d\n", query(1, 0, n - 2).ans + 1);
    else
      printf("1\n");
  }
  return 0;
}
