Cod sursa(job #2109979)

Utilizator mateibanuBanu Matei Costin mateibanu Data 20 ianuarie 2018 11:53:31
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>

using namespace std;

int n,m;
int ai[500001];
int val;

int query(int x, int y, int a, int b,int o){
    if (x<=a&&y>=b) return ai[o];
    int m=(a+b)/2,mx=0;
    if (x<=m) mx=query(x,y,a,m,o*2);
    if (m<y) mx=max(mx,query(x,y,m+1,b,o*2+1));
    return mx;
}

void add(int p,int a, int b, int o){
    if (a==b) ai[o]=val;
    else{
    int m=(a+b)/2;
    if (p<=m) add(p,a,m,o*2);
    else add(p,m+1,b,o*2+1);
    ai[o]=max(ai[o*2],ai[o*2+1]);
    }
}

void read(){
    int i,x;
    scanf("%d%d",&n,&m);
    for (i=1;i<=n;i++) {
        scanf("%d",&val);
        add(i,1,n,1);
    }
}

int main()
{
    int i,p,x,y;
    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);

    read();

    for (i=1;i<=m;i++){
        scanf("%d%d%d",&p,&x,&y);
        if (p==1){
            val=y;
            add(x,1,n,1);

        }
        else{
            printf("%d\n",query(x,y,1,n,1));
        }
    }

    return 0;
}