Pagini recente » Cod sursa (job #381851) | Atasamentele paginii oji_09_2012 | Cod sursa (job #201893) | Statistici aalabama (taok) | Cod sursa (job #2182556)
#include <iostream>
#include <fstream>
#define NMAX 100000
using namespace std;
struct up
{
int poz,val;
} update;
struct q
{
int start,finish;
} query;
int tree[NMAX*4],n;
void runupdate(int st,int dr,int postree)
{
if (st==dr)
{
tree[postree]=update.val;
return;
}
int mij=(st+dr)/2;
if (update.poz<=mij)
runupdate(st,mij,2*postree);
else
runupdate(mij+1,dr,2*postree+1);
tree[postree]=max(tree[2*postree],tree[2*postree+1]);
}
int runquery(int st,int dr,int postree)
{
if (st>=query.start&&dr<=query.finish)
return tree[postree];
if (st>query.finish||dr<query.start)
return 0;
int mij=(st+dr)/2;
return max(runquery(st,mij,2*postree),runquery(mij+1,dr,2*postree+1));
}
int main()
{
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
int m;
fin>>n>>m;
for (int i=1; i<=n; i++)
{
fin>>update.val;
update.poz=i;
runupdate(1,n,1);
}
for (int i=1; i<=m; i++)
{
char cer;
int a,b;
fin>>cer>>a>>b;
if (cer=='0')
{
query.start=a;
query.finish=b;
fout<<runquery(1,n,1)<<'\n';
}
else
{
update.poz=a;
update.val=b;
runupdate(1,n,1);
}
}
return 0;
}