Submission #170345

#TimeUsernameProblemLanguageResultExecution timeMemory
170345ngmhSterilizing Spray (JOI15_sterilizing)C++11
5 / 100
5096 ms13936 KiB
#include <bits/stdc++.h>
using namespace std;

struct node {
        long long  s, e, m, v;
        node *l, *r;
	node(long long _s, long long _e){
		s = _s; e = _e; m = (s+e)/2; v = 0;
		if(s != e){
			l = new node(s, m);
			r = new node(m+1, e);
		}
	}
	void point_update(long long x, long long y){
		if(s == e){ v = y; return; }
		if(x > m) r->point_update(x, y);
		if(x <= m) l->point_update(x, y);
		v = l->v+r->v;
	}
	void range_update(long long x, long long y, long long k){
		if(s == e){ v /= k; return; }
		if(x > m) r->range_update(x, y, k);
		else if(y <= m) l->range_update(x, y, k);
		else { l->range_update(x, m, k); r->range_update(m+1, y, k); }
		v = l->v+r->v;
	}
	long long range_query(long long x, long long y){
		if(s == x && e == y) return v;
		if(x > m) return r->range_query(x, y);
		if(y <= m) return l->range_query(x, y);
		return l->range_query(x, m)+r->range_query(m+1, y);
        }
} *root;

long long n, q, o, a, b, c;
int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cin >> n >> q >> c;
	root = new node(1, n);
	for(int i = 1; i <= n; i++){
		cin >> a;
		root->point_update(i, a);
	}
	for(int i = 0; i < q; i++){
		cin >> o;
		if(o == 1){
			cin >> a >> b;
			root->point_update(a, b);
		} else if(o == 3){
			cin >> a >> b;
			cout << root->range_query(a, b) << "\n";
		} else {
			cin >> a >> b;
			root->range_update(a, b, c);
		}
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...