Pagini recente » Cod sursa (job #925092) | Cod sursa (job #2020591) | Cod sursa (job #1703540) | Cod sursa (job #2149343) | Cod sursa (job #1818137)
#include <fstream>
#include <math.h>
#include <vector>
#include <set>
#include <algorithm>
#include <cstring>
//#include <unordered_map>
#include <iomanip>
#include <time.h>
#include <stdio.h>
#include <bitset>
#include <map>
#define MAX 500000000000
//#include <iostream>
//#include <windows.h>
#include <deque>
using namespace std;
//ifstream cin("jocul.in");
//ofstream cout("jocul.out");
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n, x[400004], m;
void cons(int n, int x[])
{
for(int i = n - 1; i > 0; i--)
x[i] = max(x[i * 2], x[i * 2 + 1]);
}
void add(int poz, int x[], int elem)
{
poz += n - 1;
x[poz] = elem;
while(poz != 1){
poz /= 2;
x[poz] = max(x[poz * 2], x[poz * 2 + 1]);
}
}
int query(int x[], int a, int b)
{
a += n; b += n;
int sum = 0;
while(a < b){
if(a % 2 != 0)
sum = max(sum, x[a++]);
if(b % 2 != 0)
sum = max(sum, x[--b]);
a /= 2;
b /= 2;
}
return sum;
}
int main()
{
cin >> n >> m;
int copn = n;
n = ((n & (n - 1)) == 0 ? n : (1<<int(log2(n) + 1)));
for(int i = 0; i < copn; i++)
cin >> x[i + n];
cons(n, x);
for(int i = 0; i < m; i++)
{
int a, b, c;
cin >> a >> b >> c;
if(a == 0)
cout << query(x, b - 1, c) << "\n";
else{
add(b, x, c);
}
}
return 0;
}