Cod sursa(job #1621633)

Utilizator alexmisto342Turdean Alexandru alexmisto342 Data 29 februarie 2016 20:25:16
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
#include <string>

using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int v[400005],i,j,n,m,a,b,mij,maxi;

void update(int st, int dr, int a, int b,int poz)
{
    if(st == dr)
    {
        v[poz] = b;
        return;
    }
    mij = (st + dr) / 2;
    if(a > mij)
        update(mij + 1, dr, a, b, poz*2 + 1);
    else
        update(st, mij, a , b, poz*2 );

    v[poz] = max(v[poz * 2], v[poz * 2 + 1]);
}
void querry(int st,int dr, int poz)
{
    int mij;
    if(st >= a && dr <= b)
    {
        maxi = max(maxi, v[poz]);
        return;
    }
    if(st > b || dr < a)
        return;
    mij = (st + dr) / 2;
    querry( mij + 1, dr, poz*2 + 1);
    querry( st, mij, poz*2);
}

int main()
{
    fin >> n >> m;
    for(i = 1; i <= n; i++)
    {
        fin >> b;
        update(1, n, i, b, 1);
    }
    for(i = 1; i <= m; i++)
    {
        int p;
        fin >> p >> a >> b;
        if(p)
            update(1, n, a, b, 1);
        else
        {
            maxi = 0;
            querry(1,n,1);
            fout<<maxi<<"\n";
        }
    }
return 0;
}