Cod sursa(job #1071931)

Utilizator Catalina_BrinzaBrinza Catalina Catalina_Brinza Data 3 ianuarie 2014 18:11:15
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb

#include <fstream>
#define nr 400001
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");


int a[nr];
int ii, fi,v,poz, ma;

int Maxim(int a, int b) {
    if ( a > b ) return a;
    return b;
}

void Up(int x,int i,int f)
{
    if (i==f)
    {
        a[x]=v;
        return;
    }
    
    int mij=(i+f)/2;
    if (poz<=mij) Up(2*x,i,mij);
    else Up(2*x+1,mij+1,f);
    
    a[x]=Maxim(a[2*x],a[2*x+1]);
}

void Q(int x,int i,int f)
{
    if (ii<=i && f<=fi)
    {
        if (ma<a[x]) ma=a[x];
        return;
    }
    
    int mij=(i+f)/2;
    if (ii<=mij) Q(2*x,i,mij);
    if (mij<fi) Q(2*x+1,mij+1,f);
}

int main()
{int n,m,x,i,z,y;
    in>>n>>m;
    for (i=1;i<=n;i++)
    {
        in>>x;
        v=x;poz=i;
        Up(1,1,n);
    }
    
    for (i=1;i<=m;i++)
    {
        in>>z>>x>>y;
        if (z==0)
        {
            ma =-1;
            ii=x; fi=y;
            Q(1,1,n);
       out<<ma<<"\n";
        }
        else
        {
            poz=x;v=y;
            Up(1,1,n);
        }
    }
    
}