Pagini recente » Cod sursa (job #1358440) | Cod sursa (job #1175073) | Cod sursa (job #1219834) | Cod sursa (job #735399) | Cod sursa (job #2755157)
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
#define N_max 1000001
long long MaxArb[4*N_max];
int start,finish;
void Update(int nod, int left, int right,int pos,long long val)
{
if ( left == right )
{
MaxArb[nod] = val;
return;
}
int mijloc = (left+right)/2;
if ( pos <= mijloc )
Update(2*nod,left,mijloc,pos,val);
else
Update(2*nod+1,mijloc+1,right,pos,val);
MaxArb[nod] = max(MaxArb[2*nod], MaxArb[2*nod+1]);
}
long long Query_max(int nod, int left, int right)
{
if ( start <= left && right <= finish )
{
return MaxArb[nod];
}
int mijloc = (left+right)/2;
long long max1=-1,max2=-1;
if ( start <= mijloc )
max1 = Query_max(nod*2,left,mijloc);
if ( mijloc < finish )
max2 = Query_max(nod*2+1,mijloc+1,right);
return max(max1,max2);
}
int main()
{
int n,m;
fin>>n>>m;
long long x;
for(int i=1;i<=n;i++)
{
fin>>x;
Update(1,1,n,i,x);
}
int com;
long long y;
for(int i=0;i<m;i++)
{
fin>>com;
if(com == 0)
{
fin>>start>>finish;
fout<<Query_max(1,1,n)<<"\n";
}
else
{
fin>>x>>y;
Update(1,1,n,x,y);
}
}
return 0;
}