Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int seq[MAXN], segt[4*MAXN], n;
- void build (int node, int l, int r) {
- if (l == r) {
- segt[node] = seq[l];
- }else {
- build(2*node+1, l, (l+r)/2);
- build(2*node+2, (l+r)/2+1, r);
- segt[node] = segt[node*2+1] * segt[node*2+2];
- }
- }
- void update (int node, int l, int r, int pos, int val) {
- if (l == r) {
- seq[pos] = segt[node] = val;
- } else {
- int mid = (l+r)/2;
- if (pos <= mid) update(2*node+1, l, mid, pos, val);
- else update(2*node+2, mid+1, r, pos, val);
- segt[node] = segt[node*2+1] * segt[node*2+2];
- }
- }
- int query (int node, int l, int r, int low, int up) {
- if (low > r || up < l) {
- return 1;
- }
- if (low <= l && up >= r) {
- return segt[node];
- } else {
- int mid = (l+r)/2;
- return query(node*2+1, l, mid, low, up)*query(node*2+2, mid+1, r, low, up);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment