Cod sursa(job #1828837)

Utilizator GandalfTheWhiteGandalf the White GandalfTheWhite Data 13 decembrie 2016 22:10:46
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <cstdio>
#include <algorithm>
using namespace std;
int n,m,arb[400100],x,a,b,poz;
int interog(int nod,int st,int dr)
{
int m,x1=0,x2=0;
if (a<=st && dr<=b) return arb[nod];
m=(st+dr)/2;
if (a<=m) x1=interog(nod*2,st,m);
if (b>m) x2=interog(nod*2+1,m+1,dr);
return max(x1,x2);
}
void update(int nod,int st,int dr)
{
int m;
if (st==dr) {
             arb[nod]=x;
             return;
            }
m=(st+dr)/2;
if (poz<=m) update(nod*2,st,m);
if (m<poz) update(2*nod+1,m+1,dr);
arb[nod]=max(arb[2*nod],arb[2*nod+1]);
}
int main()
{
int i,op;
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&n,&m);
for (i=1;i<=n;i++)
   {
   scanf("%d",&x);
   poz=i;
   update(1,1,n);
   }
while (m--)
   {
    scanf("%d%d%d",&op,&a,&b);
    if (op==0) printf("%d\n",interog(1,1,n));
    else {
          poz=a;x=b;
          update(1,1,n);
         }
   }
return 0;
}