Pagini recente » Cod sursa (job #3003826) | Cod sursa (job #116807) | Cod sursa (job #1823021) | Cod sursa (job #2397697) | Cod sursa (job #3003841)
#include <fstream>
using namespace std;
ifstream f("arbint..in");
ofstream g("arbint..out");
const int nmx=100000;
int v[nmx+5],n;
int tree[nmx*2+5];
/// function to build the tree
void build(int arr[]){
/// insert leaf nodes in tree
for(int i=0;i<=n;i++)
tree[n+i]=arr[i];
/// build the tree by calculating parents
for(int i=n;i>0;--i)
tree[i]=max(tree[i<<1],tree[i<<1 | 1]);
}
/// function to update a tree node
void updateTreeNode(int p,int value){
/// set value at position p
tree[p+n]=value;
p=p+n;
/// move upward and update parents
for(int i=p;i>1;i>>=1)
tree[i>>1]=max(tree[i],tree[i^1]);
}
/// function to get sum on interval [l, r)
int query(int l,int r){
int res=0;
/// loop to find the sum in the range
for(l+=n,r+=n;l<r;l>>=1,r>>=1){
if(l&1)
res=max(res,tree[l++]);
if(r&1)
res=max(res,tree[--r]);
}
return res;
}
int main(){
int m;
f>>n>>m;
for(int i=1;i<=n;++i)
f>>v[i];
build(v);
/*g<<'*';
for(int i=1;i<=2*n;++i)
g<<tree[i]<<" ";
g<<'\n';*/
for(;m>0;--m){
int cer,a,b;
f>>cer>>a>>b;
if(cer==0)
g<<query(a,b+1)<<'\n';
else{
updateTreeNode(a,-v[a]);
updateTreeNode(a,b);
}
/*g<<'*';
for(int i=1;i<=2*n;++i)
g<<tree[i]<<" ";
g<<'\n';*/
}
return 0;
}