Submission #151974

#TimeUsernameProblemLanguageResultExecution timeMemory
151974TadijaSebezSterilizing Spray (JOI15_sterilizing)C++11
100 / 100
591 ms9080 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N=100050;
ll sum[N];
void Set(int i, ll f){ for(;i<N;i+=i&-i) sum[i]+=f;}
ll Get(int i){ ll ans=0;for(;i;i-=i&-i) ans+=sum[i];return ans;}
ll Get(int l, int r){ return Get(r)-Get(l-1);}
int a[N];
set<int> pos;
void upd(int x, int y){ Set(x,y-a[x]);a[x]=y;}
int main()
{
	int n,q,k;
	scanf("%i %i %i",&n,&q,&k);
	for(int i=1;i<=n;i++) scanf("%i",&a[i]),Set(i,a[i]),pos.insert(i);
	while(q--)
	{
		int t,l,r;
		scanf("%i %i %i",&t,&l,&r);
		if(t==1) upd(l,r),pos.insert(l);
		if(t==2 && k!=1)
		{
			for(auto it=pos.lower_bound(l);it!=pos.upper_bound(r);)
			{
				upd(*it,a[*it]/k);
				if(a[*it]==0) pos.erase(it++);
				else it++;
			}
		}
		if(t==3) printf("%lld\n",Get(l,r));
	}
	return 0;
}

Compilation message (stderr)

sterilizing.cpp: In function 'int main()':
sterilizing.cpp:15:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%i %i %i",&n,&q,&k);
  ~~~~~^~~~~~~~~~~~~~~~~~~~~
sterilizing.cpp:16:53: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for(int i=1;i<=n;i++) scanf("%i",&a[i]),Set(i,a[i]),pos.insert(i);
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~
sterilizing.cpp:20:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%i %i %i",&t,&l,&r);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...