Pagini recente » Cod sursa (job #2440531) | Cod sursa (job #1738749) | Cod sursa (job #531282) | Cod sursa (job #1101097) | Cod sursa (job #2239701)
#include <fstream>
#define NMAX 100001
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int N,M,MaxArb[NMAX],X,poz,Val,query,maxim;
int start,finish,A,B;
inline int Maxim(int a, int b)
{
if(a > b) return a;
return b;
}
void Update(int node, int left, int right)
{
if(left==right)
{
MaxArb[node]=Val;
return;
}
int div=(left+right)/2;
if( poz <= div) Update(node*2,left,div);
else Update(node*2+1,div+1,right);
MaxArb[node]=Maxim(MaxArb[node*2],MaxArb[node*2+1]);
}
void Query(int node, int left, int right)
{
if(start <= left && right <= finish)
{
if(maxim < MaxArb[node]) maxim=MaxArb[node];
return;
}
int div=(left+right)/2;
if(start <= div) Query(2*node,left,div);
if(div < finish) Query(2*node+1,div+1,right);
}
int main()
{
fin>>N>>M;
for(int i = 1; i <= N; i++)
{
fin>>X;
poz=i;
Val=X;
Update(1,1,N);
}
for(int i = 1; i <= M; i++)
{
fin>>query>>A>>B;
if(query==0)
{
maxim=-1;
start=A;
finish=B;
Query(1,1,N);
fout<<maxim<<'\n';
}
else
{
poz=A;
Val=B;
Update(1,1,N);
}
}
}