#include <bits/stdc++.h>
using namespace std;
struct Node {
  int ans;
  int size;
  int posSuf;
  int posNegSuf;
  int posNegPref;
  int negPref;
  Node() {}
  Node(long long val) {
    size = 1;
    if (val == 0) {
      ans = 0;
      posSuf = posNegSuf = posNegPref = negPref = 0;
    } else if (val < 0) {
      ans = 1;
      posSuf = 0;
      posNegSuf = 1;
      posNegPref = 1;
      negPref = 1;
    } else {
      ans = 1;
      posSuf = 1;
      posNegSuf = 1;
      posNegPref = 1;
      negPref = 0;
    }
  }
  void update(long long val) {
    size = 1;
    if (val == 0) {
      ans = 0;
      posSuf = posNegSuf = posNegPref = negPref = 0;
    } else if (val < 0) {
      ans = 1;
      posSuf = 0;
      posNegSuf = 1;
      posNegPref = 1;
      negPref = 1;
    } else {
      ans = 1;
      posSuf = 1;
      posNegSuf = 1;
      posNegPref = 1;
      negPref = 0;
    }
  }
};
int n;
int m;
long long d[300001];
int a[300000];
Node t[1200000];
void merge(Node& ans, Node& a, Node& b) {
  ans.negPref = a.negPref == a.size ? a.size + b.negPref : a.negPref;
  ans.posSuf = b.posSuf == b.size ? b.size + a.posSuf : b.posSuf;
  ans.posNegPref =
      a.posNegPref == a.size
          ? a.posSuf == a.size ? a.size + b.posNegPref : a.size + b.negPref
          : a.posNegPref;
  ans.posNegSuf =
      b.posNegSuf == b.size
          ? b.negPref == b.size ? b.size + a.posNegSuf : b.size + a.posSuf
          : b.posNegSuf;
  ans.size = a.size + b.size;
  ans.ans = max(a.ans, b.ans);
  ans.ans = max(ans.ans, a.posSuf + b.posNegPref);
  ans.ans = max(ans.ans, a.posNegSuf + b.negPref);
}
void build(int v, int tl, int tr) {
  if (tl == tr) {
    t[v].update(d[tl]);
  } else {
    int tm = (tl + tr) >> 1;
    build(v << 1, tl, tm);
    build((v << 1) + 1, tm + 1, tr);
    merge(t[v], t[v << 1], t[(v << 1) + 1]);
  }
}
void update(int v, int tl, int tr, int pos, int val) {
  if (tl == tr) {
    d[pos] += val;
    t[v].update(d[pos]);
  } else {
    int tm = (tr + tl) >> 1;
    if (pos <= tm)
      update(v << 1, tl, tm, pos, val);
    else
      update((v << 1) + 1, tm + 1, tr, pos, val);
    merge(t[v], t[v << 1], t[(v << 1) + 1]);
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
  }
  for (int i = 0; i < n - 1; i++) {
    d[i] = a[i + 1] - a[i];
  }
  cin >> m;
  if (n == 1) {
    for (int i = 0; i < m; i++) {
      cout << "1\n";
    }
    return 0;
  }
  build(1, 0, n - 2);
  for (int i = 0; i < m; i++) {
    int l, r;
    int val;
    cin >> l >> r >> val;
    l--;
    r--;
    if (l - 1 >= 0) {
      update(1, 0, n - 2, l - 1, val);
    }
    if (r <= n - 2) {
      update(1, 0, n - 2, r, -val);
    }
    cout << t[1].ans + 1 << "\n";
  }
  return 0;
}
