Pagini recente » Cod sursa (job #19007) | Cod sursa (job #1886371) | Cod sursa (job #941093) | Cod sursa (job #2722636) | Cod sursa (job #2177199)
#include <iostream>
#include <fstream>
using namespace std;
int v[2000000],n,m,N=1;
void arbint()
{
int i;
for(i=N-1;i>0;i--)
{
v[i]=max(v[i*2],v[2*i+1]);
}
}
void update(int poz, int x)
{
poz=poz+N-1;
v[poz]=x;
while(poz>=1)
{
poz/=2;
v[poz]=max(v[poz*2],v[poz*2+1]);
}
}
int query(int p, int x, int y, int st, int dr)
{
if(x==st && y==dr)
return v[p];
int middle=(st+dr)/2;
if(x>=middle+1) return query(2*p+1,x,y,middle+1,dr);//st=1; dr=8 mid=4 dar 4 e putere de-al lui 2, deci jumatatea din drapta o sa inceapa de la 4+1=5 adica mid+1
if(y<=middle) return query(2*p,x,y,st,middle);
return max(query(2*p,x,middle,st,middle),query(2*p+1,middle+1,y,middle+1,dr));
}
int main()
{
int i,x,y,op;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
fin>>n>>m;
while(N<n)
N*=2;
for(i=N;i<N+n;i++)
{
fin>>v[i];
}
arbint();
for(i=1;i<=m;i++)
{
fin>>op>>x>>y;
if(op==1) update(x,y);
else fout<<query(1,x,y,1,N)<<"\n";/*
for(int j=1;j<N+n;j++)
cout<<v[j]<<" ";
cout<<"\n";*/
}
fin.close();
fout.close();
return 0;
}