Cod sursa(job #2638395)

Utilizator EszterHalasz Eszter Eszter Data 28 iulie 2020 09:27:20
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
//#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

ifstream cin("arbint.in");
ofstream cout("arbint.out");

vector<int>x;

int n,m,a,i,maxi,p,q,r;

void bemax(int bal,int jobb,int gyoker,int poz, int k)
{
    if(bal==jobb)
    {
        x[gyoker]=k;
        return;
    }
    int kozep=(jobb+bal)/2;
    if(poz<=kozep) bemax(bal,kozep,2*gyoker,poz,k);
    else bemax(kozep+1,jobb,2*gyoker+1,poz,k);
    x[gyoker]=max(x[gyoker*2],x[gyoker*2+1]);
}
void lekermax(int bal,int jobb,int gyoker,int a,int b)
{
    if(a<=bal && jobb<=b)
    {
        if(x[gyoker]>maxi) maxi=x[gyoker];
        return;
    }
    int kozep=(jobb+bal)/2;
    if(kozep>=a) lekermax(bal,kozep,gyoker*2,a,b);
    if(kozep<b) lekermax(kozep+1,jobb,gyoker*2+1,a,b);
}
int main()
{
    cin>>n>>m;
    x.resize(4*n+1);
    for(i=1;i<=n;++i)
    {
        cin>>a;
        bemax(1,n,1,i,a);
    }

    //for(i=1;i<=4*n+1;++i)
      //  cout<<x[i]<<" ";

    for(i=1;i<=m;++i)
    {
        cin>>p>>q>>r;
        if(p==0)
        {
            maxi=-999999;
            lekermax(1,n,1,q,r);
            cout<<maxi<<"\n";
        }
        else bemax(1,n,1,q,r);
    }
    return 0;
}