Submission #1224082

#TimeUsernameProblemLanguageResultExecution timeMemory
1224082jasonicProgression (NOI20_progression)C++20
0 / 100
120 ms7488 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...