Submission #1291864

#TimeUsernameProblemLanguageResultExecution timeMemory
1291864Jawad_Akbar_JJSterilizing Spray (JOI15_sterilizing)C++20
0 / 100
5092 ms2112 KiB
#include <iostream>

using namespace std;
const int N = (1<<17) + 1;
int sum[N<<1], k;

void insert(int i, int vl, int cur = 1, int st = 1, int en = N){
	if (en - st == 1){
		sum[cur] = vl;
		return;
	}
	int lc = cur<<1, rc = lc + 1, mid = (st + en)>>1;

	if (i < mid)
		insert(i, vl, lc, st, mid);
	else
		insert(i, vl, rc, mid, en);
	sum[cur] = sum[lc] + sum[rc];
}

void oper(int l, int r, int cur = 1, int st = 1, int en = N){
	if (l >= en or r <= st or sum[cur] == 0)
		return;
	if (en - st == 1){
		sum[cur] /= k;
		return;
	}
	int lc = cur<<1, rc = lc + 1, mid = (st + en)>>1;

	oper(l, r, lc, st, mid);
	oper(l, r, rc, mid, en);
	sum[cur] = sum[lc] + sum[rc];
}

int get(int l, int r, int cur = 1, int st = 1, int en = N){
	if (l >= en or r <= st)
		return 0;
	if (l <= st and r >= en)
		return sum[cur];
	int lc = cur<<1, rc = lc + 1, mid = (st + en)>>1;
	return get(l, r, lc, st, mid) + get(l, r, rc, mid, en);
}

int main(){
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	int n, q;
	cin>>n>>q>>k;

	for (int i=1, a;i<=n;i++){
		cin>>a;
		insert(i, a);
	}

	for (int i=1;i<=q;i++){
		int t, l, r;
		cin>>t>>l>>r;

		if (t == 1)
			insert(l, r);
		else if (t == 2)
			oper(l, r + 1);
		else
			cout<<get(l, r+1)<<'\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...