Pagini recente » Cod sursa (job #1104251) | Cod sursa (job #532518) | Cod sursa (job #2555689) | Cod sursa (job #2343269) | Cod sursa (job #563436)
Cod sursa(job #563436)
#include<fstream>
using namespace std;
int v[500003],n,m,maxim,poz,x,s,d;
int max(int z, int y)
{
if(z>y) return z;
return y;
}
void update(int nod,int st,int dr)
{
if(st==dr){
v[nod]=x;
return;}
else{
if(poz<=(st+dr)/2) update(2*nod,st,(st+dr)/2);
else
update(2*nod+1,(st+dr)/2+1,dr);
v[nod]=max(v[nod*2],v[nod*2+1]);
}}
void query(int nod,int st,int dr)
{
if(s<=st&&dr<=d){
maxim=max(maxim,v[nod]);
return;}
if(s<=(st+dr)/2) query(2*nod,st,(st+dr)/2);
if((st+dr)/2<d) query(2*nod+1,(st+dr)/2+1,dr);
}
int main()
{int i,c;
ifstream f("arbint.in");
f>>n>>m;
for(i=1;i<=n;i++)
{f>>x; poz=i;
update(1,1,n);
}
ofstream g("arbint.out");
for(i=1;i<=m;i++)
{f>>c;
if(!c)
{f>>s>>d;
query(1,1,n);
g<<maxim<<'\n';
maxim=0;}
else{
f>>poz>>x;
update(1,1,n);}
}
f.close();
g.close();
return 0;
}