Pagini recente » Cod sursa (job #840823) | Cod sursa (job #1958208) | Cod sursa (job #716684) | Cod sursa (job #2517376) | Cod sursa (job #2944261)
#include <fstream>
const int VMAX=1e5+5;
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
void update(int, int, int);
void query(int, int, int);
int arbint[4*VMAX];
int n, q, nrupd, poz, stq, drq, maxim;
int main()
{
int i, tip, a, b;
fin>>n>>q;
for(i=1; i<=n; i++)
{
fin>>nrupd;
poz=i;
update(1, 1, n);
}
for(i=1; i<=q; i++)
{
fin>>tip>>a>>b;
if(tip==1)
{
poz=a;
nrupd=b;
update(1, 1, n);
}
else
{
stq=a;
drq=b;
maxim=0;
query(1, 1, n);
fout<<maxim<<'\n';
}
}
return 0;
}
void update(int nod, int st, int dr)
{
if(st==dr)
{
arbint[nod]=nrupd;
return;
}
int mij=(st+dr)/2;
if(poz<=mij) update(2*nod, st, mij);
else update(2*nod+1, mij+1, dr);
arbint[nod]=max(arbint[2*nod], arbint[2*nod+1]);
}
void query(int nod, int st, int dr)
{
if(st>=stq && dr<=drq)
{
maxim=max(maxim, arbint[nod]);
return;
}
if(st==dr) return;
int mij=(st+dr)/2;
if(stq<=mij) query(2*nod, st, mij);
else if(mij<stq) query(2*nod+1, mij+1, dr);
}