Cod sursa(job #2011613)

Utilizator smatei16Matei Staicu smatei16 Data 16 august 2017 18:04:09
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <cstdio>
#include <algorithm>
using namespace std;
int in,sf,a,b,marb[100003],x,val,poz,Max,n,m;
void update(int nod,int left, int right){
if(left==right){
marb[nod]=val;
return;
}
int mij=(left+right)/2;
if(poz<=mij)update(nod*2,left,mij);
else update(nod*2+1,mij+1,right);
marb[nod]=max(marb[nod*2],marb[nod*2+1]);
}
void query(int nod,int left,int right){
if(in<=left && right<=sf){
    if(Max<marb[nod])Max=marb[nod];
    return;}
    int mij=(left+right)/2;
    if(in<=mij)query(nod*2,left,mij);
    if(mij<sf)query(nod*2+1,mij+1,right);
}
int i;
int main()
{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;val=x;
update(1,1,n);
}
for(i=1;i<=n;i++){
    scanf("%d %d %d",&x,&a,&b);
    if(x==0){
        Max=0;
        in=a;sf=b;
        query(1,1,n);
        printf("%d\n",Max);
    }
    else {
        poz=a;val=b;
        update(1,1,n);
    }
}

    return 0;
}