Pagini recente » Cod sursa (job #3167262) | Cod sursa (job #2311764) | Cod sursa (job #1535343) | Cod sursa (job #2360038) | Cod sursa (job #1074856)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int aint[1000006], n, t, m, x, mx, mid, a, b;
void update(int p, int st, int dr){
if(st==dr)
aint[p]=b;
else{
mid=(st+dr)/2;
if(a<=mid) update(p*2, st, mid);
else update(p*2+1, mid+1, dr);
aint[p]=max(aint[p*2], aint[p*2+1]);
}
}
void query(int p, int st, int dr){
if(a<=st && dr<=b)
mx = max(mx, aint[p]);
else{
mid=(st+dr)/2;
if(a<=mid) query(2*p, st, mid);
if(mid<b) query(2*p+1, mid+1, dr);
}
}
int main()
{
f>>n>>m;
for(int i=1; i<=n; ++i)
f>>x, a=i, b=x, update(1, 1, n);
while(m--){
f>>t>>a>>b;
if(t==1) update(1, 1, n);
else mx=0, query(1, 1, n), g<<mx<<'\n';
}
return 0;
}