Pagini recente » Cod sursa (job #1938586) | Cod sursa (job #1943277) | Cod sursa (job #1517176) | Cod sursa (job #1811870) | Cod sursa (job #1931149)
#include<bits/stdc++.h>
using namespace std;
int n,m,heap[300300],t,x,y,val;
void update (int nod, int st, int dr,int i)
{
//cout << "beda1 " << st<< " " << dr << " " << nod << " "<<"\n";
if(st == dr)
{
heap[nod] = val;
return;
}
int mid = (st + dr)/2;
if(i <= mid) update(nod*2,st,mid, i);
else update(nod*2 + 1, mid + 1, dr, i);
heap[nod] = max(heap[2*nod], heap[2*nod+1]);
}
int query(int nod, int st, int dr)
{
// cout << "beda2 " << st<< " " << dr << " " << nod << " "<<"\n";
if (x <= st && dr <= y)
{
return heap[nod];
}
int a = 0,b = 0, mid = (st + dr)/2;
if (x <= mid) a = query(nod*2, st,mid);
if(y > mid) b = query(nod*2 + 1, mid + 1, dr);
return max(a,b);
}
int main()
{
ifstream cin("arbint.in");
ofstream cout("arbint.out");
cin >> n >> m;
for (int i = 1; i <= n; i++){
cin >> val;
update(1,1,n,i);
}
while(m--){
cin >> t >> x >> y;
if(t == 0){
cout << query(1,1,n) << "\n";
}else{ val = y; update(1,1,n,x);}
}
}