Cod sursa(job #2482420)

Utilizator AACthAirinei Andrei Cristian AACth Data 28 octombrie 2019 11:23:08
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m;
int x[400001];
int val,pos;
int a,b;
void build(int nod, int left , int right)
{
    if(left==right)
    {
        x[nod]=val;
        return;
    }
    else
    {
        int m=(left+right)/2;
        if(pos <= m)
            build(2*nod,left,m);
        else
            build(2*nod+1,m+1,right);
        x[nod]=max(x[2*nod],x[2*nod+1]);
    }
}
int maxim;
void query(int nod ,int left, int right)
{
   // cout<<"crapa";
    if(a <= left and right <= b)
    {
            maxim=max(maxim,x[nod]);
            return;
    }


    int m=(left+right)/2;
    if(a <= m) query(2*nod,left,m);
    if(m < b) query(2*nod+1,m+1,right);
}
int main()
{
    f>>n>>m;
    int i;

    for(i=1;i<=n;i++)
    {
           f>>val;
           pos=i;
           build(1,1,n);
    }


    //pana aici bun
    for(i=1;i<=m;i++)
    {
        int type;
        f>>type;
       // cout<<type<<' ';
        if(type==0)
        {
            maxim=-2;
            f>>a>>b;
            query(1,1,n);
            g<<maxim<<'\n';
        }
        else
        {
            f>>pos>>val;
            build(1,1,n);
        }
    }







    return 0;
}