Pagini recente » Cod sursa (job #2392524) | Cod sursa (job #2435164) | Cod sursa (job #2372177) | Cod sursa (job #540799) | Cod sursa (job #2227960)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int v[100010],i,n,a,b,maxx,val;
struct nod
{
int info,x,y;
nod *st,*dr;
};
void actualizare(nod *r)
{
int m;
if(a==r->x&&a==r->y)
{
r->info=b;
}
else
{
m=(r->x+r->y)/2;
if(a<=m)
actualizare(r->st);
else
actualizare(r->dr);
r->info=max(r->st->info,r->dr->info);
}
}
void maxim(nod *r)
{
int m;
if(a<=r->x&&b>=r->y)
{
maxx=max(maxx,r->info);
}
else
{
m=(r->x+r->y)/2;
if(a<=m)
maxim(r->st);
if(b>m)
maxim(r->dr);
}
}
void calc (nod *r)
{
if(r->x!=r->y)
{
calc(r->st);
calc(r->dr);
r->info=max(r->st->info,r->dr->info);
}
}
void construire(nod *r)
{
nod *q;
int m;
if(r->x!=r->y)
{
m=(r->x+r->y)/2;
q=new nod;
r->st=q;
q->x=r->x;
q->y=m;
construire(q);
q=new nod;
r->dr=q;
q->x=m+1;
q->y=r->y;
construire(q);
}
else
{
r->info=v[r->x];
r->st=NULL;
r->dr=NULL;
}
}
void afisare(nod *r)
{
if(r->st!=NULL)
{
afisare(r->st);
}
fout<<r->x<<" "<<r->y<<" "<<r->info<<'\n';
if(r->dr!=NULL)
{
afisare(r->dr);
}
}
int main()
{
int m;
nod *q,*r;
fin>>n>>m;
for(i=1; i<=n; i++)
fin>>v[i];
r=new nod;
r->x=1;
r->y=n;
construire(r);
calc(r);
//afisare(r);
for(i=1; i<=m; i++)
{
fin>>val;
fin>>a>>b;
if(val==0)
{
maxx=0;
maxim(r);
fout<<maxx<<'\n';
}
else
{
actualizare(r);
}
}
}