#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define len(x) (int)x.size()
#define all(x) x.begin(), x.end()

using namespace std;

//#define mtask

void solve(){
    int n;
    cin >> n;
    vector<int> a(n);
    for(int i = 0; i < n; ++i){
        cin >> a[i];
    }
    set<array<int, 3>> st;
    vector<int> d(n - 1);
    int s = 0;
    for(int i = 0; i < n - 1; ++i){
        d[i] = a[i + 1] - a[i];
    }
    for(int i = 1; i < n - 1; ++i){
        if(d[i] != d[i - 1]){
            st.insert({s, i, d[i - 1]});
            s = i;
        }
    }
    st.insert({s, n, d[n - 2]});
    multiset<int> qs;
    qs.insert({1});

    auto add = [&](int i){
        auto it = st.lower_bound({i + 1, -10, -10});
        if(it == st.end()) return;
        auto it2 = it;
        --it2;
        if((*it2)[2] == 1 && (*it)[2] == -1){
            qs.insert(2 * min((*it2)[1] - (*it2)[0], (*it)[1] - (*it)[0]) + 1);
        }
    };

    auto del = [&](int i){
        auto it = st.lower_bound({i + 1, -10, -10});
        if(it == st.end()) return;
        auto it2 = it;
        --it2;
        if((*it2)[2] == 1 && (*it)[2] == -1){
            qs.erase(qs.find(2 * min((*it2)[1] - (*it2)[0], (*it)[1] - (*it)[0]) + 1));
        }
    };

    for(auto x : st){
        add(x[0]);
    }

    auto upd = [&](int i, int x){
        auto cur = st.lower_bound({i + 1, -1, -1});
        --cur;
        if((*cur)[2] == x) return;
        int mn = (*cur)[0];
        auto tmp = cur;
        for(int k = 0; k < 4; ++k){
            del((*tmp)[0]);
            mn = (*tmp)[0];
            if(tmp != st.begin()){
                --tmp;
            }
            else{
                break;
            }
        }
        int mx = (*cur)[0];
        tmp = cur;
        for(int k = 0; k < 4; ++k){
            ++tmp;
            if(tmp == st.end()) break;
            mx = (*tmp)[0];
            del((*tmp)[0]);
        }


        int le = (*cur)[0];
        int ri = (*cur)[1];
        if(le + 1 == ri){
            int nl = le;
            int nr = ri;
            auto pr = cur;
            if(pr != st.begin()){
                --pr;
                if((*pr)[2] == x){
                    nl = (*pr)[0];
                }
            }
            auto nxt = cur;
            ++nxt;
            if(nxt != st.end()){
                if((*nxt)[2] == x){
                    nr = (*nxt)[1];
                }
            }
            st.erase(cur);
            if(nl != le){
                st.erase(pr);
            }
            if(nr != ri){
                st.erase(nxt);
            }
            st.insert({nl, nr, x});
        }
        else if(le == i){
            int nl = i;
            int nr = i + 1;
            array<int, 3> nw = {i + 1, (*cur)[1], (*cur)[2]};
            auto pr = cur;
            if(cur != st.begin()){
                --pr;
                if((*pr)[2] == x){
                    nl = (*pr)[0];
                }
            }
            if(nl != i){
                st.erase(pr);
            }
            st.erase(cur);
            st.insert(nw);
            st.insert({nl, nr, x});
        }
        else if(ri - 1 == i){
            int nl = i;
            int nr = i + 1;
            array<int, 3> nw = {(*cur)[0], i, (*cur)[2]};
            auto nxt = cur;
            ++nxt;
            if(nxt != st.end()){
                if((*nxt)[2] == x){
                    nr = (*nxt)[1];
                }
            }
            if(nr != i + 1){
                st.erase(nxt);
            }
            st.erase(cur);
            st.insert(nw);
            st.insert({nl, nr, x});
        }
        else{
            array<int, 3> nw1 = {(*cur)[0], i, (*cur)[2]};
            array<int, 3> nw2 = {i + 1, (*cur)[1], (*cur)[2]};
            array<int, 3> nw3 = {i, i + 1, x};
            st.erase(cur);
            st.insert(nw1);
            st.insert(nw2);
            st.insert(nw3);
        }

        cur = st.lower_bound({i + 1, -1, -1});
        --cur;
        auto ntmp = cur;
        while(ntmp != st.begin()){
            if((*ntmp)[0] < mn) break;
            --ntmp;
            add((*ntmp)[0]);
        }
        ntmp = cur;
        while(ntmp != st.end()){
            add((*ntmp)[0]);
            if((*ntmp)[0] >= mx) break;
            ++ntmp;
        }
    };

    cout << *qs.rbegin() << '\n';

    int q;
    cin >> q;
    while(q--){
        int i, x;
        cin >> i >> x;
        --i;
        if(i){
            upd(i - 1, x - a[i - 1]);
        }
        if(i < n - 1){
            upd(i, a[i + 1] - x);
        }
        a[i] = x;
        cout << *qs.rbegin() << endl;
    }

}

int main() {
    ios_base::sync_with_stdio(false);
    cout.precision(40);
#ifdef LOCAL
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
#endif
#ifdef mtask
    int t;
    cin >> t;
    while(t--)
#endif
    solve();
}