#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define fastIO cin.tie(0); ios::sync_with_stdio(false)
const int s = 600;
struct SD{
    int n;
    vector<ll> arr;
    vector<ll> pref;
    vector<ll> suff;
    vector<ll> longest;
    SD(vector<ll> a) {
        n = a.size()-2;
        arr = vector<ll>(n, 0);
        pref = vector<ll>((n+s-1)/s, -1);
        suff = vector<ll>((n+s-1)/s, 0);
        longest = vector<ll>((n+s-1)/s, 0);
        for(int i = 0; i < n; i++) {
            arr[i] = a[i+2] - a[i+1] - a[i+1] + a[i];
        }
        for(int i = 0; i*s < n; i++) {
            ll curr = 0;
            for(int j = 0; j < s && j + i*s < n; j++) {
                if(arr[j + i*s] == 0) curr++;
                else {
                    if(pref[i] == -1) pref[i] = curr;
                    longest[i] = max(longest[i], curr);
                    curr = 0;
                }
            }
            suff[i] = curr;
        }
    }
    int qry(int ql, int qr) {
        if(qr <= ql) return ql-qr+1;
        ll ans = 0;
        // cout << ql << ' ' << qr << '\n';
        ll curr = 0;
        for(int i = ql; i <= qr; i++) {
            if(i % s == 0 && i + s - 1 <= qr) {
                curr += pref[i/s];
                if(pref[i/s] != s) {
                    ans = max(curr, ans);
                    curr = suff[i/s];
                }
            } else {
                if(arr[i] == 0) curr++;
                else {
                    ans = max(curr, ans);
                    curr = 0;
                }
            }
            ans = max(curr, ans);
        }
        // cout << ans << '\n';
        
        return ans;
    }
};
int main() {
    fastIO;
    
    int n, q; cin >> n >> q;
    vector<ll> a(n); for(auto &i : a) cin >> i;
    SD sqrtdecomp(a);
    for(int qq = 0; qq < q; qq++) {
        int op; cin >> op;
        if(op == 1) { // patch, i.e. add
            assert(op == 3);
        } else if (op == 2) { // rewrite, i.e. override
            assert(op == 3);
        } else { // evaluate, i.e. find longest zero
            int l, r; cin >> l >> r; l--, r--;
            if(l < r-2) {
                cout << sqrtdecomp.qry(l, r-2)+2 << '\n';
            } else {
                cout << r-l+1 << '\n';
            }
        }
    }
    
    return 0;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |