Pagini recente » Cod sursa (job #1724020) | Cod sursa (job #1030537) | Cod sursa (job #40680) | Cod sursa (job #1791339) | Cod sursa (job #3245439)
#include <iostream>
using namespace std;
long long int v[100001];
long long int s[400001];
int n,i,m,a,b,c;
void maketree(int i, int p, int q)
{
if(p==q)
{
s[i]=v[p];
}
else
{
int m=(p+q)/2;
maketree(i*2,p,m);
maketree(i*2+1,m+1,q);
s[i]=s[2*i]+s[2*i+1];
}
}
long long maxx(int i, int left, int right, int ls, int rd)
{
long long int m=0;
for(int j=ls; j<=rd; j++)
{
m=max(m, v[j]);
}
return m;
}
void update(int i, int p, int q, int a)
{
if(p==q)
s[i]=v[p];
else
{
int m=(p+q)/2;
if(a<=m)
update(2*i,p,m,a);
else update(2*i+1,m+1,q,a);
s[i]=s[2*i]+s[2*i+1];
}
}
int main()
{
cin>>n>>m;
for(i=1;i<=n;i++)
cin>>v[i];
maketree(1,1,n);
for(i=1;i<=m;i++)
{
cin>>c>>a>>b;
if(c==0)
cout<<maxx(1,1,n,a,b)<<endl;
else
{
v[a]=b;
update(1,1,n,a);
}
}
return 0;
}