Pagini recente » Cod sursa (job #260795) | Cod sursa (job #3254962) | Cod sursa (job #2680669) | Cod sursa (job #1603307) | Cod sursa (job #585289)
Cod sursa(job #585289)
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,i,a,b,t;
int ArbInt[524290];
int val,poz,maxim,start,final;
void update(int,int,int);
void query(int,int,int);
int main () {
f >> n >> m;
for (i=1;i<=n;i++) {
f >> val;
poz=i;
update(1,1,n);
}
for (i=1;i<=m;i++) {
f >> t >> a >> b;
if (t==1) {
poz=a;val=b;
update(1,1,n);
}
else {
maxim=-1;
start=a;final=b;
query(1,1,n);
g << maxim << '\n';
}
}
f.close();g.close();
return 0;
}
void update (int nod,int stanga,int dreapta) {
if (stanga==dreapta) {
ArbInt[nod]=val;
return;
}
int mij=(stanga+dreapta)/2;
if (poz<=mij) update(2*nod,stanga,mij);
else update(2*nod+1,mij+1,dreapta);
ArbInt[nod]=max(ArbInt[2*nod],ArbInt[2*nod+1]);
}
void query (int nod,int stanga,int dreapta) {
if (start<=stanga && dreapta<=final) {
if (maxim<ArbInt[nod]) maxim=ArbInt[nod];
return;
}
int mij=(stanga+dreapta)/2;
if (start<=mij) query(2*nod,stanga,mij);
if (mij<final) query(2*nod+1,mij+1,dreapta);
}