Submission #333414

#TimeUsernameProblemLanguageResultExecution timeMemory
333414errorgornSterilizing Spray (JOI15_sterilizing)C++17
100 / 100
230 ms9068 KiB
#include <bits/stdc++.h>
using namespace std;

int n,q,k;
int arr[100005];
set<int> s;

long long fen[100005];
void update(int i,int j){
    while (i<100005){
        fen[i]+=j;
        i+=i&-i;
    }
}

long long query(int i){
    long long res=0;
    while (i){
        res+=fen[i];
        i-=i&-i;
    }
    return res;
}

long long query(int i,int j){
    return query(j)-query(i-1);
}

int main(){
    scanf("%d%d%d",&n,&q,&k);
    
    for (int x=1;x<=n;x++){
        scanf("%d",&arr[x]);
        if (arr[x]){
            update(x,arr[x]);
            s.insert(x);
        }
    }
    
    int a,b;
    while (q--){
        scanf("%d",&a);
        if (a==2){
            scanf("%d%d",&a,&b);
            if (k==1) continue;
            for (set<int>::iterator it=s.lower_bound(a);it!=s.end() && *it<=b;){
                update(*it,arr[*it]/k-arr[*it]);
                arr[*it]/=k;
                if (arr[*it]==0){
                    it++;
                    s.erase(prev(it));
                }
                else{
                    it++;
                }
            }
        }
        else if (a==1){
            scanf("%d%d",&a,&b);
            update(a,b-arr[a]);
            arr[a]=b;
            s.insert(a);
        }
        else{
            scanf("%d%d",&a,&b);
            printf("%lld\n",query(a,b));
        }
    }
}

Compilation message (stderr)

sterilizing.cpp: In function 'int main()':
sterilizing.cpp:30:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   30 |     scanf("%d%d%d",&n,&q,&k);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~
sterilizing.cpp:33:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   33 |         scanf("%d",&arr[x]);
      |         ~~~~~^~~~~~~~~~~~~~
sterilizing.cpp:42:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   42 |         scanf("%d",&a);
      |         ~~~~~^~~~~~~~~
sterilizing.cpp:44:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   44 |             scanf("%d%d",&a,&b);
      |             ~~~~~^~~~~~~~~~~~~~
sterilizing.cpp:59:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   59 |             scanf("%d%d",&a,&b);
      |             ~~~~~^~~~~~~~~~~~~~
sterilizing.cpp:65:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   65 |             scanf("%d%d",&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...