Submission #362562

#TimeUsernameProblemLanguageResultExecution timeMemory
362562denkendoemeerSterilizing Spray (JOI15_sterilizing)C++14
100 / 100
887 ms10544 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int n,v[100005];
set<int>st;
struct ain
{
    ll aint[270000];
    void update(int nod,int st,int dr,int poz,int val)
    {
        if (poz<st || poz>dr)
            return ;
        if (st==dr){
            aint[nod]=val;
            return ;
        }
        int mij=(st+dr)/2;
        update(nod*2,st,mij,poz,val);
        update(nod*2+1,mij+1,dr,poz,val);
        aint[nod]=aint[nod*2]+aint[nod*2+1];
    }
    ll query(int nod,int st,int dr,int l,int r)
    {
        if (dr<l || r<st)
            return 0;
        if (l<=st && dr<=r)
            return aint[nod];
        int mij=(st+dr)/2;
        return query(nod*2,st,mij,l,r)+query(nod*2+1,mij+1,dr,l,r);
    }
}ai;
int main()
{
    //freopen(".in","r",stdin);
    //freopen(".out","w",stdout);
    int q,k,i;
    scanf("%d%d%d",&n,&q,&k);
    for(i=1;i<=n;i++){
        scanf("%d",&v[i]);
        ai.update(1,1,n,i,v[i]);
        if (v[i])
            st.insert(i);
    }
    for(i=1;i<=q;i++){
        int tip,x,y;
        scanf("%d%d%d",&tip,&x,&y);
        if (tip==1){
            v[x]=y;
            ai.update(1,1,n,x,v[x]);
            if (v[x])
                st.insert(x);
        }
        if (tip==2){
            if (k==1)
                continue;
            auto l=st.lower_bound(x);
            auto r=st.upper_bound(y);
            vector<int>aux;
            while(l!=r){
                int val=*l;
                l++;
                v[val]/=k;
                ai.update(1,1,n,val,v[val]);
                if (v[val]==0)
                    aux.push_back(val);
            }
            for(auto it:aux)
                st.erase(it);
        }
        if (tip==3)
            printf("%lld\n",ai.query(1,1,n,x,y));
    }
return 0;
}

Compilation message (stderr)

sterilizing.cpp: In function 'int main()':
sterilizing.cpp:37:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   37 |     scanf("%d%d%d",&n,&q,&k);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~
sterilizing.cpp:39:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   39 |         scanf("%d",&v[i]);
      |         ~~~~~^~~~~~~~~~~~
sterilizing.cpp:46:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   46 |         scanf("%d%d%d",&tip,&x,&y);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...