Pagini recente » Cod sursa (job #1126437) | Cod sursa (job #356938) | Cod sursa (job #3134730) | Cod sursa (job #1607567) | Cod sursa (job #1877845)
#include <fstream>
#define lg 100005
using namespace std;
int n,m,init[lg],t[4*lg+200],a,b,rez;
inline int max(int aa,int bb){
return aa>bb?aa:bb;
}
// vectorul init
void construiesc(int st,int dr,int poz){
if(st==dr){
init[st]=poz;
return;
}
int x=(st+dr)/2;
construiesc(st,x,2*poz);
construiesc(x+1,dr,2*poz+1);
}
//***************ACTUALIZARE
void actualizez(int poz, int val){
int x=init[poz];
t[x]=val;
x>>=1;
while(x){
t[x]=max(t[2*x],t[2*x+1]);
x>>=1;
}
}
//************INTEROGARE
void interogare(int st,int dr,int poz){
if(st>b || dr<a)
return;
if(a<=st && dr<=b)
rez=max(rez,t[poz]);
else{
if(st<dr){
int x=(st+dr)/2;
interogare(st,x,poz*2);
interogare(x+1,dr,poz*2+1);
}
}
}
int main(){
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int i,x;
fin>>n>>m;
construiesc(1,n,1);
fout<<'\n';
//*************CITIRE ELEMENTE
for(i=1;i<=n;++i){
fin>>x;
actualizez(i,x);
}
//****************EFECTUARE TESTE
for(i=0;i<m;++i){
fin>>x>>a>>b;
if(!x){
rez=0;
interogare(1,n,1);
fout<<rez;
}
else
actualizez(a,b);
}
fout<<'\n';
fin.close();
fout.close();
return 0;
}