Submission #1227323

#TimeUsernameProblemLanguageResultExecution timeMemory
1227323jer033Progression (NOI20_progression)C++20
15 / 100
3095 ms7576 KiB
#include <bits/stdc++.h>
using ll = long long;
using namespace std;

ll solve(vector<ll> diff, int l, int r)
{
    if ((r-l)<=1)
        return r-l+1;
    int N = diff.size();
    vector<int> barriers;
    barriers.push_back(l);
    for (int i=l+1; i<=(r-1); i++)
    {
        if (2*diff[i]-diff[i-1]-diff[i+1])
            barriers.push_back(i);
    }
    barriers.push_back(r);
    int k = barriers.size();
    int bes = 0;
    for (int i=1; i<k; i++)
        bes = max(bes, barriers[i]-barriers[i-1]);
    bes++;
    return bes;
}

int main()
{
    int N, Q; cin >> N >> Q;
    vector<ll> diff(N);
    for (int i=0; i<N; i++)
        cin >> diff[i];
    vector<ll> ddiff(N);
    //ll curr_ans = solve(diff, 0, N-1);
    while (Q--)
    {
        int p; cin >> p;
        if (p==2)
        {
            ll l, r, s, c; cin >> l >> r >> s >> c; l--; r--;
            for (ll i=l; i<=r; i++)
                diff[i] = (i-l)*c+s;
        }
        else if (p==3)
        {
            int l, r; cin >> l >> r; l--; r--;
            cout << solve(diff, l, r) << '\n';
        }
        else
        {
            ll l, r, s, c; cin >> l >> r >> s >> c; l--; r--;
            for (ll i=l; i<=r; i++)
                diff[i] += (i-l)*c+s;
        }
    }
}
#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...