Pagini recente » Cod sursa (job #3367168) | Cod sursa (job #3367046) | Cod sursa (job #3365507) | Cod sursa (job #3366648) | Cod sursa (job #3366515)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n,n_nou,queries;
vector<int> aint,sol;
int actualizare_n(int n)
{
while(n&(n-1)){
n+=n&-n;
} return n;
}
void set(int pos,int val)
{
pos+=n_nou; aint[pos]=val;
for(pos/=2;pos;pos/=2) aint[pos]=max(aint[2*pos],aint[2*pos+1]);
}
int answer_queries(int l,int r)
{
int maxi=-1;
l+=n_nou; r+=n_nou;
while(l<=r){
if(l&1){
maxi=max(maxi,aint[l]);
l++;
}
if(!(r&1)){
maxi=max(maxi,aint[r]);
r--;
}
l>>=1;
r>>=1;
} return maxi;
}
int main()
{
cin>>n>>queries;
n_nou=actualizare_n(n);
aint.resize(2*n_nou,-1);
for(int i=0;i<n;i++){
int value; cin>>value;
set(i,value);
}
for(int i=0;i<queries;i++){
int op; cin>>op;
int x,y; cin>>x>>y;
if(op==1){
set(x-1,y); continue;
}
sol.push_back(answer_queries(x-1,y-1));
}
for(auto x:sol) cout<<x<<'\n';
return 0;
}