Cod sursa(job #1364913)

Utilizator bilbor987Bogdan Pocol bilbor987 Data 27 februarie 2015 21:29:07
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include<fstream>
#define NMAX 100005
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");

int N,M,V[4*NMAX],globala;

void Update(int left, int right, int var, int start, int node)
{
    int mid=(left+right)/2;
    if(left==right)
    {
        V[node]=var;
        return;
    }
    if(start<=mid)
        Update(left,mid,var,start,2*node);
    else
        Update(mid+1,right,var,start,(2*node)+1);
    V[node]=max(V[2*node],V[2*node+1]);

}

void Read()
{
    fin>>N>>M;
    for(int i=1;i<=N;i++)
    {
        int var;
        fin>>var;
        Update(1,N,var,i,1);
    }
}

void Query(int left, int right, int a, int b, int node)
{
    int mid=(left+right)/2;
    if(right<a || left>b)
        return;
    if(left>=a && right <=b)
    {
        globala=max(V[node],globala);
        return;
    }
    Query(left,mid,a,b,2*node);
    Query(mid+1,right,a,b,2*node+1);

}

void Solve()
{
    int cer,a,b;
    for(int i=1;i<=M;i++)
    {
        fin>>cer>>a>>b;
        if(cer==0)
        {
            globala=0;
            Query(1,N,a,b,1);
            fout<<globala<<"\n";
        }
        else
            Update(1,N,b,a,1);
    }
}

int main()
{
    Read();
    Solve();
    return 0;
}