Cod sursa(job #2011068)

Utilizator catalin9898Bajenaru Catalin catalin9898 Data 15 august 2017 00:51:08
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <iostream>
#include <cstdio>
using namespace std;
int v[100001],w[262144];

void upd(int nod,int j,int val,int st,int dr)
{
    if(dr==st){w[nod]=val;return;}
    int mi=(st+dr)/2;
    if(j<=mi)upd(nod*2,j,val,st,mi);
    else upd(nod*2+1,j,val,mi+1,dr);
   w[nod]=w[nod*2];
    if(w[nod]<w[nod*2+1])w[nod]=w[nod*2+1];
}

int query(int nod,int a,int b,int st,int dr)
{
    if(a<=st&&b>=dr)return w[nod];
    int mi=(st+dr)/2,c=-1,d=-1;
    if(b>mi)c=query(nod*2+1,a,b,mi+1,dr);
    if(a<=mi)d=query(nod*2,a,b,st,mi);
    if(c<d)return d;
    return c;
}


int main()
{freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
    int n,m,i,j,a,b;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{scanf("%d",&j);
upd(1,i,j,1,n);
}

for(i=0;i<m;i++)
{
    scanf("%d%d%d",&j,&a,&b);
    if(j==0)
    {
    printf("%d\n",query(1,a,b,1,n));
    }
    else if(j==1)
    {
        upd(1,a,b,1,n);
    }
}

    return 0;
}