Cod sursa(job #1947093)

Utilizator tqmiSzasz Tamas tqmi Data 30 martie 2017 18:59:56
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <fstream>
using namespace std;

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

int N,M;
int m[1<<18];

void up(int poz, int val,int l, int r, int nod)
{
    int mid=(l+r)/2;
    int son1=nod*2,son2=nod*2+1;
    if(l==r)
    {
        m[nod]=val;
        return;
    }
    if(poz<=mid)
        up(poz,val,l,mid,son1);
    else
        up(poz,val,mid+1,r,son2);
    m[nod]=max(m[son1],m[son2]);
    return;
}

int querry(int x,int y,int l, int r, int nod)
{
    int mid=(l+r)/2;
    int son1=nod*2,son2=nod*2+1;
    if((x<=l && y>=r) || (l>=r))
        return m[nod];
    else
    {
        int sol=0;
        if(x<=mid)
            sol=max(sol,querry(x,y,l,mid,son1));
        if(y>mid)
            sol=max(sol,querry(x,y,mid+1,r,son2));
        return sol;
    }

}

int main()
{
    fin>>N>>M;
    for(int i=1;i<=N;i++)
    {
        int x;
        fin>>x;
        up(i,x,1,N,1);
    }
    for(int i=1;i<=M;i++)
    {
        int op,x,y;
        fin>>op>>x>>y;
        if(!op)
        {
            fout<<querry(x,y,1,N,1)<<"\n";
        }
        else
        {
            up(x,y,1,N,1);
        }
    }
    return 0;
}