Pagini recente » Cod sursa (job #1418312) | Cod sursa (job #2028280) | Cod sursa (job #75752) | Cod sursa (job #3131549) | Cod sursa (job #2244362)
#include <iostream>
#include <fstream>
const int MAXN = 1e5 * 4 + 5;
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int arbint[MAXN],v[MAXN],n,q;
//default arguments (nici eu nu stiam)
///https://en.cppreference.com/w/cpp/language/default_arguments
void upd(int pos,int value,int nod = 1,int left = 1,int right = n){
if(left == right){
arbint[nod] = value;
return;
}
int mij = (left + right) / 2;
if(pos <= mij)
upd(pos,value,nod * 2,left,mij);
else
upd(pos,value,nod * 2 + 1,mij + 1,right);
arbint[mij] = max(arbint[nod * 2], arbint[nod * 2 + 1]);
}
int query(int qa,int qb,int nod = 1,int left = 1,int right = n){
if(qa <= left && right <= qb)
return arbint[nod];
int mij = (left + right) / 2,maxim = 0;
if(qa <= mij)
maxim = max(maxim,query(qa,qb,nod * 2,left,mij));
if(mij < qb)
maxim = max(maxim,query(qa,qb,nod * 2 + 1,mij + 1,right));
return maxim;
}
int main()
{
in>>n>>q;
for(int i = 1; i <= n; i++){
in>>v[i];
upd(i,v[i]);
}
for(int i = 1; i <= q; i++){
int type,a,b;
in>>type>>a>>b;
if(type == 1)
upd(a,b);
else
out<<query(a,b)<<"\n";
}
return 0;
}