Cod sursa(job #2493439)

Utilizator nicolaee2Martinescu Nicolae nicolaee2 Data 16 noiembrie 2019 12:22:32
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.42 kb
#include <iostream>
#include <fstream>
#define NMAX 1000005*2

using namespace std;

ifstream fin("arbint.in");
ofstream fout("arbint.out");

int ar[NMAX]; //nod unde ma aflu
              //poz pozitie vector

int n,m;

int Query(int nod,int a,int b,int st,int dr)
{
    int apel1=0,apel2=0;
    if(st>=a && dr<=b)
    {
        return ar[nod];
    }
    else
    {
        int mij = (st+dr) >>1;
        if(a <= mij)
        {
            apel1 = Query(nod<<1,a,b,st,mij);
        }
        if(b > mij)
        {
            apel2 = Query((nod<<1)|1,a,b,mij+1,dr);
        }
        return max(apel1,apel2);
    }
}
void Update(int nod,int poz, int val,int st,int dr)
{
    if(st == dr)
    {
        ar[nod] = val;
    }
    else
    {
        int mij = (st+dr)>>1;
        if(poz<=mij)
        {
            Update(nod<<1,poz,val,st,mij);
        }
        else
        {
            Update((nod<<1)|1,poz,val,mij+1,dr);
        }
        ar[nod] = max(ar[nod<<1],ar[(nod<<1)|1]);

    }
}




int main()
{

    fin>>n>>m;

    for(int i=1;i<=n;i++)
    {
        int x;
        fin>>x;
        Update(1,i,x,1,n);
    }
    for(int i=1;i<=m;i++)
    {
        int ch,a,b;
        fin>>ch>>a>>b;
        if(ch==0)
        {
            fout<<Query(1,a,b,1,n)<<'\n';
        }
        else
        {
            Update(1,a,b,1,n);
        }
    }

    return 0;
}