Mai intai trebuie sa te autentifici.
Cod sursa(job #1623768)
Utilizator | Data | 1 martie 2016 21:32:28 | |
---|---|---|---|
Problema | Arbori de intervale | Scor | 30 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.44 kb |
#include<iostream>
#include<fstream>
#define DX 100000
using namespace std;
fstream fin("arbint.in",ios::in),fout("arbint.out",ios::out);
int v[DX],ai[4*DX],maxi;
void build(int nod,int st,int dr)
{
if(st==dr)
{
ai[nod]=v[st];
return ;
}
int m=(st+dr)/2,plod=nod*2;
build(plod ,st ,m );
build(plod+1,m+1,dr);
ai[nod]=max(ai[nod],max(ai[plod],ai[plod+1]));
}
void arbint(int nod,int st,int dr,int qst,int qdr)
{
if(dr<qst || qdr<st) return ;
int m=(st+dr)/2,plod=nod*2;
if(qst<=st && dr<=qdr)
{
maxi=max(maxi,ai[nod]);
}
if(st==dr) return ;
arbint(plod,st,m,qst,qdr);
arbint(plod+1,m+1,dr,qst,qdr);
}
void update(int nod,int st,int dr,int pecine,int val)
{
if(st==dr)
{
if(st==pecine) ai[nod]=val;
return ;
}
int m=(st+dr)/2,plod=nod*2;
if(st<=pecine && pecine<=m)
update(plod,st,m,pecine,val);
if(m<pecine && pecine<=dr)
update(plod+1,m+1,dr,pecine,val);
ai[nod]=max(ai[plod],ai[plod+1]);
}
int main()
{
int m,n,i,j,a,b,c;
fin>>n>>m;
for(i=1;i<=n;i++) fin>>v[i];
build(1,1,n);
for(i=1;i<=m;i++)
{
fin>>a>>b>>c;
if(a==0)
{
maxi=0;
arbint(1,1,n,b,c);
fout<<maxi<<"\n";
}
else
{
v[a]=b;
update(1,1,n,b,c);
}
}
}