Pagini recente » Cod sursa (job #546449) | Cod sursa (job #2777259) | Monitorul de evaluare | Cod sursa (job #1164869) | Cod sursa (job #334759)
Cod sursa(job #334759)
#include <iostream>
#include <fstream>
using namespace std;
#define NMAX 100001
#define NMAXX 200002
long q,w,a,b,i,n,m,v[NMAX],t[NMAXX];
void build(long k, long beg, long end){
if (beg==end){
t[k]=v[beg];
return;
}
build(2*k,beg,(beg+end)/2);
build(2*k+1,(beg+end)/2+1,end);
if (t[k*2]>=t[k*2+1])
t[k]=t[k*2];
else
t[k]=t[k*2+1];
}
long maxq (long k, long beg, long end){
if (a>end || b<beg){
return -1;
}
if (a<=beg && end<=b){
return t[k];
}
long x=maxq(2*k,beg,(beg+end)/2);
long y=maxq(2*k+1,(beg+end)/2+1,end);
if (x>=y)
return x;
else
return y;
}
int main(){
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
fin >> n >> m;
for (i=1; i<=n; i++){
fin >> v[i];
}
build(1,1,n);
for (w=1; w<=m; w++){
fin >> q >> a >> b;
if (q==0){
fout << maxq(1,1,n) << "\n";
}
if (q==1){
v[a]=b;
build(1,1,n);
}
}
fin.close();
fout.close();
return 0;
}