Submission #1215482

#TimeUsernameProblemLanguageResultExecution timeMemory
1215482countlessProgression (NOI20_progression)C++20
0 / 100
3093 ms9836 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef long double ld;

#define sp <<" "<<
#define endl "\n"

struct segtree {
    int l, r;

    segtree *left, *right;
};

void solve() {
    ll n, q; cin >> n >> q;
    ll sync = 0;
    n += sync;
    vector<ll> a(n), d1, d2;
    for (int i = sync; i < n; i++) cin >> a[i];
    
    auto derive = [&](vector<ll> &a) -> vector<ll> {
        vector<ll> res(n);
        for (int i = 1; i < n; i++) {
            res[i] = a[i] - a[i-1];
        }
        return res;
    };

    auto print = [&](vector<ll> &a) -> void {
        for (auto &x : a) {
            cerr << x << " ";
        }   cerr << endl;
    };

    auto enact = [&]() -> void {
        d1 = derive(a);
        d2 = derive(d1);
    };

    auto debug = [&]() -> void {
        print(a), print(d1), print(d2);
    };

    enact();

    ll type, l, r, s, c;
    while (q--) {
        cin >> type;

        if (type == 1) {
            cin >> l >> r >> s >> c; l--, r--;
            l += sync, r += sync;

            for (ll i = l; i <= r; i++) {
                a[i] += s + (i - l) * c;
            }

            enact();
        } else

        if (type == 2) {
            cin >> l >> r >> s >> c; l--, r--;
            l += sync, r += sync;

            for (ll i = l; i <= r; i++) {
                a[i] = s + (i - l) * c;
            }

            enact();
        } else 

        if (type == 3) {
            cin >> l >> r; l--, r--;

            ll mx = 0, cnt = 0;
            for (int i = l+1; i <= min(n-1, r+1); i++) {
                if (d2[i] == 0) {
                    cnt++;
                    mx = max(mx, cnt);
                } else {
                    cnt = 0;
                }
            }
            mx = max(mx, cnt);

            cout << mx + 2 << endl;
        }
    }
}

signed main() {
    cin.tie(0);
    ios_base::sync_with_stdio(false);

    int t = 1;
    // cin >> t;
    while (t--)
        solve();
}
#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...