Pagini recente » Cod sursa (job #2901491) | Cod sursa (job #3150188) | Cod sursa (job #1438668) | Cod sursa (job #2136224) | Cod sursa (job #1040171)
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
#define d 100001
int n,m;
int tree[2*d-1];
int pos,val;
int mxx,intLow,intHigh;
int maximum(int a,int b)
{
if(a>b) return a;
return b;
}
void update(int fp,int left,int right)
{
if(left==right)
{
tree[fp] = val;
return;
}
int seg = (left+right)/2;
if(pos<=seg) update(2*fp,left,seg);
else update(2*fp+1,seg+1,right);
tree[fp] = maximum(tree[2*fp],tree[2*fp+1]);
}
void query(int fp,int left,int right)
{
if(intLow<=left && right<=intHigh)
{
if(mxx<tree[fp]) mxx = tree[fp];
return;
}
int seg = (left+right)/2;
if(intLow<=seg) query(2*fp,left,seg);
if(seg<intHigh) query(2*fp+1,seg+1,right);
}
int main()
{
int i,op,x,y;
fin>>n>>m;
for(i=1;i<=n;i++)
{
fin>>x;pos=i;val=x;
update(1,1,n);
}
for(i=1;i<=m;i++)
{
fin>>op>>x>>y;
if(op==0)
{
mxx = -1;
intLow = x;
intHigh = y;
query(1,1,n);
fout<<mxx<<"\n";
}
else
{
pos = x;
val = y;
update(1,1,n);
}
}
return 0;
}