Pagini recente » Cod sursa (job #3362735) | Cod sursa (job #3362918) | Cod sursa (job #3362925) | Cod sursa (job #3362769) | Cod sursa (job #3362939)
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int v[100001];
vector <int> segtree(400001);
int n,m;
void build(int node) {
if (node>=n) segtree[node]=v[node-n+1];
else {
build(node*2);
build(node*2+1);
segtree[node]=max(segtree[node*2],segtree[node*2+1]);
}
}
void update(int a,int b) {
v[a]=b;
a+=n-1;
segtree[a]=b;
a/=2;
while (a>=1) {
segtree[a]=max(segtree[2*a],segtree[2*a+1]);
a/=2;
}
}
int query(int a, int b, int start, int end, int node) {
int rasp=0;
int mij=(start+end)/2;
if (a<=start && end<=b) {
rasp=max(rasp,segtree[node]);
return rasp;
}
if (a<=mij) {
rasp=max(rasp,query(a,b,start,mij,2*node));
}
if (b>mij) {
rasp=max(rasp,query(a,b,mij+1,end,2*node+1));
}
return rasp;
}
int main() {
fin>>n>>m;
for (int i=1;i<=n;i++) {
fin >> v[i];
}
int aux=log2(n);
n=pow(2,(aux+1));
build(1);
for (int i=1;i<=m;i++) {
int cer,a,b;
fin >> cer >> a >> b;
if (cer==0) {
fout << query(a,b,1,n,1) << "\n";
}else {
update(a,b);
}
}
return 0;
}