Submission #78121

#TimeUsernameProblemLanguageResultExecution timeMemory
78121nxteruSterilizing Spray (JOI15_sterilizing)C++14
100 / 100
250 ms12620 KiB
#include <iostream>
#include <algorithm>
#include <set>
#include <cstdio>
using namespace std;
typedef long long ll;
ll n,q,k,p[100005],bit[100005];
set<int>o;
void add(int a,ll x){
    while(a<=n){
        bit[a]+=x;
        a+=(a&-a);
    }
}
ll sum(int a){
    ll res=0;
    while(a>0){
        res+=bit[a];
        a-=(a&-a);
    }
    return res;
}
int main(void){
    scanf("%lld%lld%lld",&n,&q,&k);
    for(int i=1;i<=n;i++){
        scanf("%lld",p+i);
        add(i,p[i]);
        if(p[i]>0)o.insert(i);
    }
    while(q){
        ll s,a,b;
        scanf("%lld%lld%lld",&s,&a,&b);
        if(s==1){
            add(a,b-p[a]);
            p[a]=b;
            o.insert(a);
        }
        if(s==2&&k!=1){
            auto it=o.lower_bound(a);
            while(it!=o.end()&&*it<=b){
                add(*it,-p[*it]+p[*it]/k);
                p[*it]/=k;
                if(p[*it]==0){
                    auto itr=it;
                    it++;
                    o.erase(itr);
                }else it++;
            }
        }
        if(s==3){
            printf("%lld\n",sum(b)-sum(a-1));
        }
        q--;
    }
}

Compilation message (stderr)

sterilizing.cpp: In function 'int main()':
sterilizing.cpp:24:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%lld%lld%lld",&n,&q,&k);
     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
sterilizing.cpp:26:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%lld",p+i);
         ~~~~~^~~~~~~~~~~~
sterilizing.cpp:32:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%lld%lld%lld",&s,&a,&b);
         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...