Submission #1013051

#TimeUsernameProblemLanguageResultExecution timeMemory
101305112345678Fish 2 (JOI22_fish2)C++17
25 / 100
4086 ms5500 KiB
#include <bits/stdc++.h>

using namespace std;

#define ll long long

const int nx=1e5+5;

ll n, q, t, x, y, a[nx], l[nx], r[nx], sm[nx], rt, dp[nx], res;

void dfs(int u)
{
    sm[u]=a[u];
    if (l[u]) dfs(l[u]), sm[u]+=sm[l[u]];
    if (r[u]) dfs(r[u]), sm[u]+=sm[r[u]];
}

void dfs2(int u)
{
    if (l[u]&&sm[l[u]]>=a[u]) dp[l[u]]=1, dfs2(l[u]);
    if (r[u]&&sm[r[u]]>=a[u]) dp[r[u]]=1, dfs2(r[u]);
}

int main()
{
    cin.tie(NULL)->sync_with_stdio(false);
    cin>>n;
    for (int i=1; i<=n; i++) cin>>a[i];
    cin>>q;
    while (q--)
    {
        cin>>t>>x>>y;
        if (t==1) a[x]=y;
        else
        {
            for (int i=x; i<=y; i++) l[i]=r[i]=0;
            stack<ll> s;
            for (int i=x; i<=y; i++)
            {
                while (!s.empty()&&a[s.top()]<a[i]) l[i]=s.top(), s.pop();
                if (s.empty()) rt=i;
                else r[s.top()]=i;
                s.push(i);
            }
            res=0;
            dfs(rt);
            for (int i=x; i<=y; i++) dp[i]=0;
            dp[rt]=1;
            dfs2(rt);
            for (int i=x; i<=y; i++) res+=dp[i];
            cout<<res<<'\n';
        }
    }
}
#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...