Pagini recente » Clasament preoni5a | Cod sursa (job #3241673) | Cod sursa (job #3135262) | Istoria paginii runda/oni_2007_ziua1_clasele_xi-xii | Cod sursa (job #2442742)
#include <iostream>
#include <fstream>
#include <assert.h>
using namespace std;
#define M 100010
ifstream fi("arbint.in");
ofstream fo("arbint.out");
long int ma[4*M+60];
long int n,m;
long int poz,val;
long int start,finish;
long int maxx;
long int maxim(long int a,long int b)
{
if(a>b)
return a;
else
return b;
}
void update(long int left, long int right,long int nod)
{
if(left==right)
{
ma[nod]=val;
return;
}
long int div=(left+right)/2;
if(poz<=div)
update(left,div,2*nod);
else
update(div+1,right,2*nod+1);
ma[nod]=maxim(ma[2*nod],ma[2*nod+1]);
}
void query(long int left,long int right,long int nod)
{
if(start<=left&&right<=finish)
{
if(maxx<ma[nod])
maxx=ma[nod];
return;
}
long int div=(left+right)/2;
if(start<=div)
query(left,div,2*nod);
if(div<finish)
query(div+1,right,2*nod+1);
}
int main()
{
fi>>n>>m;
for(long int i=1;i<=n;i++)
{
fi>>val;
poz=i;
update(1,n,1);
}
for(int i=1;i<=m;i++)
{
int x;
fi>>x;
if(x==0)
{
fi>>start>>finish;
maxx=-1;
query(1,n,1);
fo<<maxx<<'\n';
}
else
{
fi>>poz>>val;
update(1,n,1);
}
}
return 0;
}