Pagini recente » Cod sursa (job #1478953) | Cod sursa (job #1914343) | Cod sursa (job #1850581) | Cod sursa (job #3235720) | Cod sursa (job #654269)
Cod sursa(job #654269)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("arbint.in");
ofstream out ("arbint.out");
const int N=100001;
int start,finish,val,pos,maxim,maxarb[4*N+66],n,m,i;
int Maxim (int a,int b)
{
if (a>b) return a;
else return b;
}
void update (int nod,int left,int right)
{
if (left==right)
{
maxarb[nod]=val;
return;
}
int div=(left+right)/2;
if (pos<=div) update (2*nod,left,div);
else update (2*nod+1,div+1,right);
maxarb[nod]=Maxim (maxarb [2*nod],maxarb[2*nod+1]);
}
void query (int nod,int left,int right)
{
if (start<=left&&right<=finish)
{
if (maxim<maxarb [nod]) maxim=maxarb[nod];
return ;
}
int div=(left+right)/2;
if (start<=div) query (2*nod,left,div);
if (div<finish) query (2*nod+1,div+1,right);
}
int main()
{
int x,y,z;
in>>n>>m;
for (i=1;i<=n;i++)
{in>>x;
pos=i; val=x;
update (1,1,n);}
for (i=1;i<=m;i++)
{
in>>x>>y>>z;;
if (x==0)
{maxim=-1;
start=y;
finish=z;
query (1,1,n);
out<<maxim<<"\n";
}
else {pos=y;
val=z;
update (1,1,n);};
}
return 0;
}