Pagini recente » Cod sursa (job #2979922) | Cod sursa (job #1438594) | Cod sursa (job #1248326) | Cod sursa (job #2551734) | Cod sursa (job #627199)
Cod sursa(job #627199)
#include<fstream>
#include<iostream>
using namespace std;
int n,m,a[400200],val,poz,c,d,maxim;
inline int max(int a,int b) {if(a>b) return a;return b;}
void query(int nod,int left,int right) {
int mij=(left+right)/2;
if(c<=left&&right<=d) {
maxim=max(maxim,a[nod]);
return;
}
if(c<=mij) query(2*nod,left,mij);
if(d>mij) query(2*nod+1,mij+1,right);
}
void update(int nod,int left,int right) {
if(left==right) {
a[nod]=val;
return;
}
int mij=(left+right)/2;
if(poz<=mij) update(2*nod,left,mij);
else update(2*nod+1,mij+1,right);
a[nod]=max(a[2*nod],a[2*nod+1]);
}
int main() {
int i,w,x,y;
ifstream in("arbint.in");
ofstream out("arbint.out");
in>>n>>m;
for(i=0;i<n;i++) {
in>>val;
poz=i;
update(1,0,n-1);
cout<<i<<endl;
}
for(i=0;i<m;i++) {
in>>w>>x>>y;
if(w==1) {
val=y;
poz=x-1;
update(1,0,n-1);
}
else {
maxim=-1;
c=x-1;
d=y-1;
query(1,0,n-1);
out<<maxim<<'\n';
}
}
out.close();
in.close();
return 0;
}