Pagini recente » Cod sursa (job #856637) | Cod sursa (job #2671900)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("lucru.in");
ofstream fout("lucru.out");
int tree[400100];
int n, m;
int maxim;
void update(int nod, int st, int dr, int poz, int val){
if(st == dr){
tree[nod] = val;
return;
}
int m = (st + dr) / 2;
if(poz <= m)
update(2 * nod, st, m, poz ,val);
else
update(2 * nod + 1, m + 1, dr, poz, val);
tree[nod] = max(tree[2 * nod], tree[2 * nod + 1]);
}
void query(int nod, int st, int dr, int start, int sfarsit){
if(start <= st && dr <= sfarsit){
if(maxim < tree[nod])
maxim = tree[nod];
return;
}
int m = (st + dr) / 2;
if(start <= m)
query(2 * nod, st, m, start, sfarsit);
if(m < sfarsit)
query(2 * nod + 1, m + 1, dr, start, sfarsit);
}
int main(){
fin >> n >> m;
int x;
for(int i = 1; i <= n; i++){
fin >> x;
update(1,1,n,i,x);
}
int op;
int a, b;
while(m--){
fin >> op >> a >> b;
if(op == 0){
maxim = -1;
query(1,1,n,a,b);
fout << maxim << '\n';
}
else
update(1,1,n,a,b);
}
fin.close();
fout.close();
return 0;
}