Pagini recente » Cod sursa (job #668101) | Cod sursa (job #701885) | Cod sursa (job #198911) | Cod sursa (job #280704) | Cod sursa (job #2558998)
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
const int NMAX = 100005;
int N,M;
int St[4*NMAX],Dr[4*NMAX],Maxim[4*NMAX];
int Indice[NMAX];
void Build(int nod,int st,int dr)
{
St[nod]=st;
Dr[nod]=dr;
if(st==dr){
f>>Maxim[nod];
Indice[st]=nod;
return;
}
int mij=(st+dr)/2;
Build(2*nod,st,mij);
Build(2*nod+1,mij+1,dr);
Maxim[nod]=max(Maxim[2*nod],Maxim[2*nod+1]);
}
int Cauta_Maxim(int nod,int st,int dr)
{
if(St[nod]>dr || Dr[nod]<st){
return -1;
}
if(st<=St[nod] && Dr[nod]<=dr){
return Maxim[nod];
}
int r1=Cauta_Maxim(2*nod,st,dr);
int r2=Cauta_Maxim(2*nod+1,st,dr);
return max(r1,r2);
}
void Configure(int nod)
{
int tata=nod/2;
if(tata){
Maxim[tata]=max(Maxim[2*tata],Maxim[2*tata+1]);
Configure(tata);
}
}
void Update(int poz,int val)
{
Maxim[Indice[poz]]=val;
Configure(Indice[poz]);
}
int main()
{
f>>N>>M;
Build(1,1,N);
while(M){
int op,a,b;
f>>op>>a>>b;
if(op==0){
g<<Cauta_Maxim(1,a,b)<<'\n';
}else{
Update(a,b);
}
M--;
}
f.close();
g.close();
return 0;
}