Pagini recente » Cod sursa (job #832625) | Cod sursa (job #2160312) | Cod sursa (job #2974455) | Cod sursa (job #2551863) | Cod sursa (job #1087349)
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int v[100009];
char c[1000000];
class Node
{
public:
int val,l,r;
Node *lt,*rt;
Node(int lef,int rai)
{
l=lef;r=rai;
if(lef==rai)
{
val=v[lef];
return;
}
lt=new Node(lef,(lef+rai)/2);
rt=new Node((lef+rai)/2+1,rai);
val=max(lt->val,rt->val);
}
void update(int poz,int v)
{
if(l==r)
{
val=v;
return;
}
if(poz<=(l+r)/2)
lt->update(poz,v);
else
rt->update(poz,v);
val=max(lt->val,rt->val);
}
int query(int lef,int rai)
{
if(lef>r||rai<l)
return -1;
if(l>=lef&&r<=rai)
return val;
return max(lt->query(lef,rai),rt->query(lef,rai));
}
};
int main()
{
int n,m,i,op,a,b,nr=1;
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d\n",&n,&m);
gets(c);
for(i=1;i<strlen(c);i++)
{
if(c[i]>='0'&&c[i]<='9')
v[nr]=v[nr]*10+c[i]-'0';
else
nr++;
}
Node A(1,n);
for(i=1;i<=m;i++)
{
scanf("%d",&op);
if(op==0)
{
scanf("%d%d",&a,&b);
printf("%d\n",A.query(a,b));
}
if(op==1)
{
scanf("%d%d",&a,&b);
A.update(a,b);
}
}
return 0;
}