Pagini recente » Cod sursa (job #576091) | Cod sursa (job #1415066) | Cod sursa (job #1341418) | Cod sursa (job #3155340) | Cod sursa (job #1043932)
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
long arb[500001];
int cs, cd, n, m, maxi, pos, val;
void create(int poz, int st, int dr)
{
int mijloc;
if(st==dr)
{
arb[poz]=val;
return;
}
mijloc=(st+dr)/2;
if(pos<=mijloc)
create(poz*2, st, mijloc);
else
create(poz*2+1, mijloc+1, dr);
arb[poz]=max(arb[2*poz], arb[2*poz+1]);
}
int query(int poz, int st, int dr)
{
int mijloc;
if(cs<=st && cd>=dr)
{
if(maxi<arb[poz])
maxi=arb[poz];
}
else
{
mijloc=(st+dr)/2;
if(cs<=mijloc)
query(2*poz, st, mijloc);
if(cd>mijloc)
query(2*poz+1, mijloc+1, dr);
}
}
int main()
{
int i, x;
f>>n;
f>>m;
for(pos=1;pos<=n;pos++)
{
f>>val;
create(1, 1, n);
}
for(i=1;i<=m;i++)
{
f>>x>>cs>>cd;
if(x==1)
{
pos=cs;
val=cd;
create(1,1, n);
}
else
{
maxi=-1;
query(1, 1, n);
g<<maxi;
g<<"\n";
}
}
}