Pagini recente » Cod sursa (job #778913) | Cod sursa (job #646317) | Cod sursa (job #1531103) | Cod sursa (job #1295133) | Cod sursa (job #1289430)
#include <iostream>
#include <fstream>
using namespace std;
struct a_nod{
int l,r,val;
a_nod *left,*right;
a_nod(){
left=right=NULL;
}
};
int a[100100],val,ql,qr,N,M,res; a_nod *root;
void init_tree(a_nod *nod){
if (nod->l==nod->r){
nod->val=a[nod->l];
return;
}
int mid=(nod->l+nod->r)/2;
a_nod *aux = new a_nod;
aux->l=nod->l, aux->r=mid;
nod->left=aux;
init_tree(aux);
aux=new a_nod;
aux->l=mid+1, aux->r=nod->r;
nod->right=aux;
init_tree(aux);
nod->val=max(nod->left->val,nod->right->val);
}
void update(a_nod *nod){
if (nod->l==nod->r){
nod->val=val;
return;
}
int mid=(nod->l+nod->r)/2;
if (ql<=mid) update(nod->left);
else update(nod->right);
nod->val=max(nod->left->val,nod->right->val);
}
void query(a_nod *nod){
if (ql<=nod->l && nod->r<=qr){
res=max(res,nod->val);
return;
}
int mid=(nod->l+nod->r)/2;
if (ql<=mid) query(nod->left);
if (qr>mid) query(nod->right);
}
int main(){
ifstream in("arbint.in");
ofstream out("arbint.out");
in >> N >> M;
int i,op;
for (i=1; i<=N; i++)
in >> a[i];
root=new a_nod;
root->l=1,root->r=N;
init_tree(root);
while (M--){
in >> op >> ql >> qr;
if (op==0){
res=0;
query(root);
out << res << "\n";
}
else{
val=qr;
update(root);
}
}
return 0;
}