제출 #1324886

#제출 시각아이디문제언어결과실행 시간메모리
1324886lizaSterilizing Spray (JOI15_sterilizing)C++20
5 / 100
5090 ms4320 KiB
#include <bits/stdc++.h>

using namespace std;

int const N = 100005;
long long seg[4*N];
long long c[N];
int n;
void cx(int x, long long v, int l=1, int r=n, int pos=1)
{
    if(l == r)
    {
        seg[pos]= v;
        return;
    }
    int m = (l+r)/2;
    if(x <= m)
    {
        cx(x, v, l, m, pos*2);
    }
    else
    {
        cx(x, v, m+1, r,pos*2+1);
    }
    seg[pos]=seg[pos*2]+seg[pos*2+1];
}

long long get(int curl, int curr, int l=1, int r=n, int pos=1)
{
    if(r < curl)
    {
        return 0;
    }
    if(l > curr)
    {
        return 0;
    }
    if(curr>=r && curl<=l)
    {
        return seg[pos];
    }
    int m = (l+r)/2;
    long long rez=0;
    rez+=get(curl, curr, l, m, pos*2)+get(curl, curr, m+1, r, pos*2+1);

    return rez;
}

int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int q, k;
    cin >> n >> q >> k;

    map<int, int> isupd;
    for(int i =1; i <= n; i++)
    {
        cin >> c[i];
    }
    while(q--)
    {
        int s; cin >> s;
        if(s==1)
        {
            long long a, b; cin >> a >> b;
            if(c[a]==b)continue;
            c[a]=b;
            isupd[a]=0;

        }
        if(s==2)
        {
            int l, r; cin >> l >> r;
            if(k==1)continue;
            for(int i = l; i<=r; i++)
            {
                if(c[i]==0)continue;
                c[i]/=k;
                isupd[i]=0;
            }
        }
        if(s==3)
        {
            int l,r ; cin >> l >> r;
            for(int i = l; i<=r; i++)
            {
                if(isupd[i])continue;
                cx(i, c[i]);
                isupd[i]=1;
            }
            cout << get(l,r) << "\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...