Pagini recente » ONIS 2015, Solutii Runda 1 | Cod sursa (job #2270925) | Cod sursa (job #619544) | Cod sursa (job #2842713) | Cod sursa (job #862291)
Cod sursa(job #862291)
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int arb[1<<19];
int n,m,i,poz,a,b,x,op;
void actualizare(int nod, int st, int dr)
{
int m;
if(st>=poz && dr<=poz)
{
arb[nod]=x;
return;
}
m=(st+dr)/2;
if(poz<=m)
actualizare(nod*2,st,m);
else actualizare(nod*2+1,m+1,dr);
if(arb[nod*2]<arb[(nod*2)+1])
arb[nod]=arb[(nod*2)+1];
else arb[nod]=arb[nod*2];
}
int interogare(int nod, int st, int dr)
{
int x1,x2,m;
x1=0; x2=0;
if((a<=st)&& (b>=dr))
return arb[nod];
m=(st+dr)/2;
if(a<=m)
x1=interogare(nod*2,st,m);
if(b>m)
x2=interogare((nod*2)+1,m+1,dr);
if(x2>x1)
x1=x2;
return x1;
}
int main()
{
f>>n>>m;
for(i=1;i<=n;i++)
{
f>>x;
poz=i;
actualizare(1,1,n);
}
for(i=1;i<=m;i++)
{
f>>op>>a>>b;
if(op==0)
g<<interogare(1,1,n)<<"\n";
else{
poz=a;
x=b;
actualizare(1,1,n);
}
}
return 0;
}