Submission #1168511

#TimeUsernameProblemLanguageResultExecution timeMemory
1168511_rain_Sterilizing Spray (JOI15_sterilizing)C++20
80 / 100
5092 ms4340 KiB
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;

const int N=(int)1e5;
int a[N+2];
int n,q,k;

namespace IT{
	#define lef(id) id*2
	#define rig(id) id*2+1
	const int MAXLOG=32;
	LL st[N*4+2];
	int stmax[N*4+2];
	void upd(int id,int l,int r,int pos,int val){
		if (l>pos||r<pos) return;
		if (l==r){
			st[id]=stmax[id]=val;
			return;
		}
		int m=(l+r)/2;
		upd(lef(id),l,m,pos,val);
		upd(rig(id),m+1,r,pos,val);
		st[id]=st[lef(id)]+st[rig(id)];
		stmax[id]=max(stmax[lef(id)],stmax[rig(id)]);
	}
	void upd_range(int id,int l,int r,int u,int v){
		if (l>v||r<u||stmax[id]==0) return;
		if (l==r) st[id]/=k,stmax[id]/=k;
		else{
			int m=(l+r)/2;
			upd_range(lef(id),l,m,u,v);
			upd_range(rig(id),m+1,r,u,v);
			st[id]=st[lef(id)]+st[rig(id)];
			stmax[id]=max(stmax[lef(id)],stmax[rig(id)]);
		}
	}
	LL Get(int id,int l,int r,int u,int v){
		if (l>v||r<u) return 0;
		if (u<=l&&r<=v) return st[id];
		int m=(l+r)/2;
		return Get(lef(id),l,m,u,v)+Get(rig(id),m+1,r,u,v);
	}
	
};

using namespace IT;

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0) ; cout.tie(0);

	
	cin>>n>>q>>k;
	for(int i=1;i<=n;++i) cin>>a[i];
	for(int i=1;i<=n;++i) upd(1,1,n,i,a[i]);
	while(q--){
		int t,x,y; cin>>t>>x>>y;
		if (t==1) upd(1,1,n,x,y);
		else if (t==2){
			upd_range(1,1,n,x,y);
		}
		else {
			cout<<Get(1,1,n,x,y)<<'\n';
		}
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...