Cod sursa(job #1341962)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 13 februarie 2015 12:27:32
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
#define DIM 100011
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m;
int A[4*DIM+1],v[DIM];

void update(int nod,int p,int u,int poz,int val){
    if(p==u){
        A[nod]=val;
        return;
    }
    int mid=p+(u-p)/2;
    if(poz<=mid) update(2*nod,p,mid,poz,val);
    else update(2*nod+1,mid+1,u,poz,val);
    A[nod]=max(A[2*nod],A[2*nod+1]);
}

int query(int nod,int p,int u,int a,int b){
    if(a<=p && u<=b)
        return A[nod];
    int m1=0,m2=0,mid=p+(u-p)/2;
    if(a<=mid)
        m1=query(2*nod,p,mid,a,b);
    if(b>mid)
        m2=query(2*nod+1,mid+1,u,a,b);
    return max(m1,m2);
}

int main(void){
    register int i,j,a,b,t;

    f>>n>>m;
    for(i=1;i<=n;i++)
        f>>v[i],update(1,1,n,i,v[i]);

    for(i=1;i<=m;i++){
        f>>t>>a>>b;
        if(t==0)
            g<<query(1,1,n,a,b)<<"\n";
        else
            update(1,1,n,a,b);
    }
    f.close();
    g.close();
    return 0;
}