Submission #1242848

#TimeUsernameProblemLanguageResultExecution timeMemory
1242848chikien2009Sterilizing Spray (JOI15_sterilizing)C++20
100 / 100
100 ms2888 KiB
#include <bits/stdc++.h>

using namespace std;

void setup()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
}

struct SEGMENT_TREE
{
    long long tree[400000];
    inline void Set(int ind, int l, int r, int x, int v)
    {
        if (r < x || x < l)
        {
            return;
        }
        if (l == r)
        {
            tree[ind] = v;
            return;
        }
        int m = (l + r) >> 1;
        Set(ind << 1, l, m, x, v);
        Set(ind << 1 | 1, m + 1, r, x, v);
        tree[ind] = tree[ind << 1] + tree[ind << 1 | 1];
    }
    inline void Update(int ind, int l, int r, int x, int y, int v)
    {
        if (r < x || y < l || tree[ind] == 0)
        {
            return;
        }
        if (l == r)
        {
            tree[ind] /= v;
            return;
        }
        int m = (l + r) >> 1;
        Update(ind << 1, l, m, x, y, v);
        Update(ind << 1 | 1, m + 1, r, x, y, v);
        tree[ind] = tree[ind << 1] + tree[ind << 1 | 1];
    }
    inline long long Get(int ind, int l, int r, int x, int y)
    {
        if (r < x || y < l)
        {
            return 0;
        }
        if (x <= l && r <= y)
        {
            return tree[ind];
        }
        int m = (l + r) >> 1;
        return Get(ind << 1, l, m, x, y) + Get(ind << 1 | 1, m + 1, r, x, y);
    }
} st;

int n, q, k, a, b, c;

int main()
{
    setup();

    cin >> n >> q >> k;
    for (int i = 0; i < n; ++i)
    {
        cin >> a;
        st.Set(1, 1, n, i + 1, a);
    }
    while (q--)
    {
        cin >> a >> b >> c;
        if (a == 1)
        {
            st.Set(1, 1, n, b, c);
        }
        else if (a == 2 && k != 1)
        {
            st.Update(1, 1, n, b, c, k);
        }
        else if (a == 3)
        {
            cout << st.Get(1, 1, n, b, c) << "\n";
        }
    }
    return 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...