Pagini recente » Cod sursa (job #2451933) | Cod sursa (job #1629115) | Cod sursa (job #1801902) | Cod sursa (job #229372) | Cod sursa (job #1200937)
#include <fstream>
using namespace std;
#define dim 200005
struct nod{int l,r;};
typedef nod Tree[dim];
Tree T;
int v[100005];
inline int left_son(int k){
return k<<1;
}
inline int right_son(int k){
return (k<<1)+1;
}
void build_tree(int x,int y,int i,Tree& T){
int mid=(x+y)/2;
T[i].l=x;
T[i].r=y;
if(x<y){
build_tree(x,mid,left_son(i),T);
build_tree(mid+1,y,right_son(i),T);
}
}
int query(int a,int b,int i,Tree& T){
if(T[i].l==T[i].r) return v[T[i].l];
int mid=(T[i].l+T[i].r)/2,rquery=-1,lquery=-1;
if(a<=mid)
lquery=query(a,mid,left_son(i),T);
if(b>mid)
rquery=query(mid+1,b,right_son(i),T);
return max(lquery,rquery);
}
int main(){
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,a,b;
bool p;
f >> n >> m;
build_tree(1,n,1,T);
for(int i=1;i<=n;i++){
f >> v[i];
}
while(m--){
f >> p >> a >> b;
if(p) v[a]=b;
else g << query(a,b,1,T) << "\n";
}
}