Pagini recente » Cod sursa (job #2098474) | Cod sursa (job #2444570) | Cod sursa (job #1266832) | Cod sursa (job #1921107) | Cod sursa (job #729714)
Cod sursa(job #729714)
#include<fstream>
using namespace std;
const int lg=100005;
ifstream f("arbint.in");
ofstream g("arbint.out");
int x,a, b,rez;
inline int max(int a, int b)
{
return a>b?a:b;
}
int init[lg], poz[lg],t[4*lg];
void constru(int st, int dr, int poz)
{
if(st==dr)
{
init[st]=poz;
return;
}
int x=(st+dr)/2;
constru(st,x,2*poz);
constru(x+1, dr, 2*poz+1);
}
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;
}
}
void interogare(int st, int dr, int poz)
{
if(st>a || dr<b)
return;
if(a<=st && dr<=b)
rez=max(rez, t[poz]);
else
if(st<dr)
{
int x=(st+dr)/2;
interogare(st, x, 2*poz);
interogare(x+1, dr, 2*poz+1);
}
}
int main()
{
int v,i,n,m;
f>>n>>m;
constru(1,n,1);
for(i=1;i<=n;i++)
{
f>>x;
actualizez(i,x);
}
for(i=1;i<=m;i++)
{
f>>x>>a>>b;
if(!x)
{
rez=0;
interogare(1,n,1);
g<<rez<<"\n";
}
else
actualizez(a,b);
}
return 0;
}