#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define fastIO cin.tie(0); ios::sync_with_stdio(false)
const int s = 4;
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;
}
}
longest[i] = max(longest[i], curr);
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... |