Pagini recente » Cod sursa (job #403201) | Cod sursa (job #3188201) | Cod sursa (job #2451477) | Cod sursa (job #724574) | Cod sursa (job #2390332)
#include <iostream>
#include <fstream>
using namespace std;
int n, m, x, a, b;
int v[400008];
void build_st()
{
for(int i = n - 1; i > 0; --i)
v[i] = max(v[2 * i], v[2 * i + 1]);
}
void update(int pos, int value)
{
pos += n;
v[pos] = value;
for(; pos > 1; pos = pos / 2)
v[pos / 2] = max(v[pos], v[pos ^ 1]);
}
int query(int l, int r)
{
//cout<<"Q\n";
int res = -1; //result
l += n;
r += n; //incepem in frunze
for(; l < r; l = l/2, r = r/2)
{
//cout<<"Intervalul: "<<l<<", "<<r<<"\n";
if(l & 1)
{
res = max(res, v[l]);
//cout<<"l "<<res<<"\n";
++l;
}
if(r & 1)
{
--r;
res = max(res, v[r]);
//cout<<"r "<<res<<"\n";
}
}
return res;
}
int main()
{
ifstream in ("arbint.in");
ofstream out ("arbint.out");
char c;
in>>n>>m;
for (int i = 0; i < n; ++i)
in>>v[n + i];
build_st();
for(int i = 0; i < m; ++i)
{
in>>c>>a>>b;
if(c == '0')
out<<query(a - 1, b)<<'\n';
if(c == '1')
update(a - 1, b);
}
return 0;
}