Pagini recente » Cod sursa (job #972744) | Cod sursa (job #702820) | Cod sursa (job #693030) | Cod sursa (job #624358) | Cod sursa (job #3288352)
#include <bits/stdc++.h>
using namespace std;
const int nmax = 1e5 + 5;
int n, m, c, a, b, aint[4 * nmax], offset, v[nmax], ans;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
////////////////////////////////////////////////////////////////////////////////
void update(int poz, int val){
aint[offset + poz] = val;
for(int j=(offset + poz)/2;j>0;j/=2){
aint[j] = max(aint[2*j] , aint[2*j+1]);
}
}
int querry(int node, int l, int r, int gl, int gr){
if(l > gr || r < gl) return 0;
if(l <= gl && gr <= r) return aint[node];
int mid = (gl + gr) / 2;
int stanga = querry(2*node, l, r, gl, mid);
int dreapta = querry(2*node+1, l, r, mid+1, gr);
return max(stanga , dreapta);
}
////////////////////////////////////////////////////////////////////////////////
int main()
{
//citire rapida
ios_base::sync_with_stdio(0);
fin.tie(0);
fout.tie(0);
fin>>n>>m;
offset = 1;
while(offset < n){
offset *= 2;
}
for(int i=1;i<=n;i++){
fin>>v[i];
update(i-1, v[i]);
}
for(int i=1;i<=m;i++){
fin>>c>>a>>b;
if(c == 1){
update(a-1, b);
}else{
ans = querry(1, a-1, b-1, 0, offset-1);
fout<<ans<<"\n";
}
}
}