Pagini recente » Cod sursa (job #2740339) | Cod sursa (job #1930871) | Cod sursa (job #96747) | Cod sursa (job #863558) | Cod sursa (job #1454374)
#include <fstream>
#include <iostream>
#include <vector>
#include <utility>
using namespace std;
class aint{
const int n;
vector<int> v;
public:
aint(const vector<int>& in_v):
n(in_v.size()),
v(2*n){
copy(begin(in_v), end(in_v), begin(v)+n);
for(int i = n-1; i > 0; --i){
v[i] = max(v[2*i], v[2*i+1]); } }
int query(int a, int b){
int rez = 0;
a+=n;
b+=n;
while(a<b){
if(a&1){
rez = max(rez, v[a++]); }
if(b&1){
rez = max(rez, v[--b]); }
a /= 2;
b /= 2; }
return rez; }
void update(int poz, const int new_val){
poz += n;
v[poz] = new_val;
for(int i = poz; i > 1; i /= 2){
v[i/2] = max(v[i], v[i^1]); } } };
int main(){
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, m;
f >> n >> m;
vector<int> v(n);
for(auto& x : v){
f >> x; }
aint ai(v);
for(int i = 0, t, a, b; i < m; ++i){
f >> t >> a >> b;
if(t == 0){
g << ai.query(a-1, b) << '\n'; }
else{
ai.update(a-1, b); } }
return 0; }