Pagini recente » Cod sursa (job #2748461) | Cod sursa (job #2799695) | Cod sursa (job #2398508) | Cod sursa (job #2848583) | Cod sursa (job #2565594)
#include <fstream>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int tree[2*100000+3];
int n;
int sum(int a, int b) {
a += n; b += n;
int s = 0;
while (a <= b) {
if (a%2 == 1) s =max(s, tree[a++]);
if (b%2 == 0) s =max(s, tree[b--]);
a /= 2; b /= 2;
}
return s;
}
void add(int k, int x) {
k += n;
tree[k] = x;
for (k /= 2; k >= 1; k /= 2) {
tree[k] = max(tree[2*k],tree[2*k+1]);
}
}
int main()
{
int nr,m;
cin>>nr>>m;
n=nr;
for(int i=1;i<=nr;++i)
{
int x;
cin>>x;
add(i,x);
}
for(int i=1;i<=m;++i)
{
int tip,a,b;
cin>>tip>>a>>b;
if(tip==0) cout<<sum(a,b)<<endl;
else add(a,b);
}
return 0;
}