Pagini recente » Cod sursa (job #2027277) | Cod sursa (job #1304743) | Cod sursa (job #1615774) | Cod sursa (job #1547237) | Cod sursa (job #1020612)
#include<fstream>
using namespace std;
int arb[400100], value, pos;
int n, m, start, finish ;
int maxim;
void build_arb(int nod, int left, int right){
if(left == right){
arb[nod] = value;
}else{
int mij = (left + right) /2;
if( pos <= mij ) build_arb(2*nod, left, mij);
else if(pos > mij) build_arb(2*nod+1, mij+1, right);
if(arb[2*nod] > arb[2*nod+1]) arb[nod] = arb[2*nod];
else arb[nod] = arb[2*nod+1];
}
}
void get_max(int nod, int left, int right){
if(start <= left && finish >= right){
if(maxim < arb[nod]) maxim = arb[nod];
}else{
int mij = (left+right)/2;
if(start <= mij) get_max(2*nod,left, mij);
if(mij < finish) get_max(2*nod+1,mij+1, right);
}
}
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int main(){
fin >> n >> m;
for(int i=1; i<=n; i++){
fin >> value;
pos = i; build_arb(1,1,n);
}
for(int i=1; i<=m; i++){
int cmd;
fin >> cmd;
if(cmd == 1){
fin >> pos >> value;
build_arb(1,1,n);
}else{
fin >> start >> finish;
maxim = -1;
get_max(1,1,n);
fout << maxim << '\n';
}
}
return 0;
}