Cod sursa(job #2290892)

Utilizator georgitTreista Georgiana georgit Data 27 noiembrie 2018 09:57:21
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#define N 100005

using namespace std;

int Maxim[4*N],maxi;
void Update(int st,int dr,int nod,int ind,int x)
{
    if(st==dr)
    {
        Maxim[nod]=x;
        return;
    }
    int mij=(st+dr)/2;
    if(ind<=mij)
        Update(st,mij,2*nod,ind,x);
    else
        Update(mij+1,dr,2*nod+1,ind,x);
    Maxim[nod]=max(Maxim[2*nod],Maxim[2*nod+1]);
}
void Query(int st,int dr,int nod,int xi,int xf)
{
    if(xi<=st and dr<=xf)
    {
        maxi=max(maxi,Maxim[nod]);
        return;
    }
    int mij=(st+dr)/2;
    if(xi<=mij)
        Query(st,mij,2*nod,xi,xf);
    if(mij<xf)
        Query(mij+1,dr,2*nod+1,xi,xf);

}
int main()
{
    ifstream f("arbint.in");
    ofstream g("arbint.out");
    int n,Q;
    f>>n>>Q;
    for(int i=1;i<=n;i++)
    {
        int x;
        f>>x;
        Update(1,n,1,i,x);
    }
    for(int q=1;q<=Q;q++)
    {
        int tip,a,b;
        f>>tip>>a>>b;
        if(tip==1)
        {
            Update(1,n,1,a,b);
        }
        else
        {
            maxi=-1;
            Query(1,n,1,a,b);
            g<<maxi<<"\n";
        }
    }
    return 0;
}