Pagini recente » Cod sursa (job #2967648) | Cod sursa (job #2962355) | Cod sursa (job #3185742) | Cod sursa (job #2389856) | Cod sursa (job #2457575)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
#define nmax 100005
int Arb[nmax*4],n,m,val,poz,x,task,a,b,st,fn,maxim;
void Update(int nod, int left, int right)
{
if(left==right)
{
Arb[nod]=val;
return;
}
int div=(left+right)/2;
if(poz<=div)
Update(2*nod,left,div);
else
Update(2*nod+1,div+1,right);
Arb[nod]=max(Arb[2*nod],Arb[2*nod+1]);
}
void Query(int nod, int left, int right)
{
if(st<=left && right<=fn)
{
if(Arb[nod]>maxim)
maxim=Arb[nod];
return;
}
int div=(left+right)/2;
if(st<=div)
Query(2*nod,left,div);
if(div<fn)
Query(2*nod+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>>task>>a>>b;
switch(task)
{
case 0:
{
maxim=-1;
st=a;
fn=b;
Query(1,1,n);
fout<<maxim<<'\n';
break;
}
case 1:
{
poz=a;
val=b;
Update(1,1,n);
break;
}
}
}
}