Submission #876131

#TimeUsernameProblemLanguageResultExecution timeMemory
876131danikoynovFish 2 (JOI22_fish2)C++14
5 / 100
4038 ms2908 KiB
#include<bits/stdc++.h>
#define endl '\n'

using namespace std;

typedef long long ll;

const int maxn = 1e5 + 10;
struct Treap
{
    struct Node
    {
        ll key;
        int pr, sz;
        Node *lf, *rf;

        Node(ll _key)
        {
            key = _key;
            pr = rand();
            lf = rf = NULL;
        }

        void con()
        {
            sz = 1;
            if (lf) sz = sz + lf -> sz;
            if (rf) sz = sz + rf -> sz;
        }
    };

    Node *root;

    void Split(Node *T, Node *&L, Node *&R, ll value)
    {
        if (T == NULL)
        {
            L = R = NULL;
            return;
        }

        if (T -> key <= value)
        {
            L = T;
            Split(T -> rf, L -> rf, R, value);
        }
        else
        {
            R = T;
            Split(T -> lf, L, R -> lf, value);
        }

        T -> con();
    }

    void Merge(Node *&T, Node *L, Node *R)
    {
        if (L == NULL && R == NULL)
        {
            T = NULL;
            return;
        }

        if (L == NULL)
        {
            T = R;
            return;
        }

        if (R == NULL)
        {
            T = L;
            return;
        }

        if (L -> pr > R -> pr)
        {
            T = L;
            Merge(T -> rf, L -> rf, R);
        }
        else
        {
            T = R;
            Merge(T -> lf, L, R -> lf);
        }

        T -> con();
    }
};

int n, q;
ll a[maxn];
void input()
{
    cin >> n;
    for (int i = 1; i <= n; i ++)
        cin >> a[i];
    cin >> q;

}

ll arr[maxn];
void solve_query(int l, int r)
{
    int len = r - l + 1;
    for (int i = l; i <= r; i ++)
        arr[i - l + 1] = a[i];


    ll last = 1, ans = 0;
    for (int i = 1; i <= len; i ++)
    {
        int lf = i - 1, rf = i + 1;
        ll sum = arr[i];
        while(lf > 0 || rf <= len)
        {
            if (lf > 0 && sum >= arr[lf])
                sum += arr[lf], lf --;
            else
            if (rf <= len && sum >= arr[rf])
                sum += arr[rf], rf ++;
            else
                break;
        }

        if (lf == 0 && rf == len + 1)
            ans ++;
    }

    cout << ans << endl;
}

void simulate()
{
    for (int i = 1; i <= q; i ++)
    {
        int type;
        cin >> type;
        if (type == 1)
        {
            int idx;
            ll x;
            cin >> idx >> x;
            a[idx] = x;
        }
        else
        {
            int l, r;
            cin >> l >> r;
            solve_query(l, r);
        }
    }
}
void solve()
{
    input();
    simulate();
}

void speed()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
}
int main()
{
    speed();
    solve();
    return 0;
}

Compilation message (stderr)

fish2.cpp: In function 'void solve_query(int, int)':
fish2.cpp:110:8: warning: unused variable 'last' [-Wunused-variable]
  110 |     ll last = 1, ans = 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...