Cod sursa(job #2909938)

Utilizator uwuenvyJeff Joe uwuenvy Data 17 iunie 2022 04:34:24
Problema Arbori de intervale Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>

using namespace std;

struct segtree{
	vector<int> seg;
	int N;
	segtree(int M){
		N = M;
		seg.resize(2*N);
	}
	void update(int k, int x){
		k += N; 
		seg[k] = x;
		while(k /= 2){
			seg[k] = max(seg[2*k],seg[2*k+1]);
		}
	}
	int query(int l, int r){
		l += N; r += N;
		int ret = 0;
		while(l <= r){
			if(l&1){
				ret = max(ret,seg[l]);
				++l;
			}
			if(!(r&1)){
				ret = max(ret, seg[r]);
				--r;
			}
			l /= 2; r /= 2;
		}
		return ret;
	}
};

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	ifstream cin("arbint.in");
	ofstream cout("arbint.out");
	int n, q;
	cin >> n >> q;
	segtree st(n);
	for(int i = 0; i < n; i++){
		int x;
		cin >> x;
		st.update(i, x);
	}
	while (q--) {
		int t;
		cin >> t;
		if (t == 1) {
			int i, val;
			cin >> i >> val;
			st.update(i-1, val);
		} else {
			int l, r;
			cin >> l >> r;
			cout << st.query(l-1, r-1) << endl;
		}
	}
}