Submission #1179751

#TimeUsernameProblemLanguageResultExecution timeMemory
1179751Szymon_PilipczukGrowing Vegetables is Fun 4 (JOI21_ho_t1)C++20
100 / 100
90 ms4312 KiB
#include <bits/stdc++.h>
int n;
using namespace std;
#define ll long long

ll tr[400000];
void add(int l,int r,ll v)
{
    l+=n;
    r+=n;
    tr[l]+=v;
    if(l!=r)tr[r]+=v;
    while(l/2 != r/2)
    {
        if(l%2 == 0)tr[l+1]+=v;
        if(r%2 == 1)tr[r-1]+=v;
        l/=2;r/=2;
    }
}
ll check(int p)
{
    p+=n;
    ll ans = 0;
    while(p > 0)
    {
        ans+=tr[p];
        p/=2;
    }
    return ans;
}
int main()
{
    cin>>n;
    int a[n];
    for(int i =0 ;i<n;i++)
    {
        cin>>a[i];
        tr[i+n] = a[i];
    }
    ll ans = 0;
    int i = 1;
    int j = n-2;
    while(i <=j)
    {
        if(check(i-1) < check(i))
        {
            i++;
            continue;
        }
        if(check(j+1) < check(j))
        {
            j--;
            continue;
        }
        ans += min(check(j+1)-check(j)+1,check(i-1)-check(i)+1);
        add(i,j,min(check(j+1)-check(j)+1,check(i-1)-check(i)+1));
    }
    if(check(i) == check(j))
    {
        ans++;
    }
    cout<<ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...