Cod sursa(job #1678279)

Utilizator KOzarmOvidiu Badea KOzarm Data 7 aprilie 2016 10:20:23
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>

using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int a[500000],n,m,i,Max,x,y;
bool p;
void modificare(int nod,int poz,int v,int p,int u)
{
    if(p<u)
    {
        int mij=(p+u)/2;
        if(poz<=mij)
            modificare(2*nod,poz,v,p,mij);
        else
            modificare(2*nod+1,poz,v,mij+1,u);
        a[nod]=max(a[2*nod],a[2*nod+1]);
    }
    else
        a[nod]=v;
}
void interogare(int nod,int st,int dr,int p,int u)
{
    if(st<=p&&dr>=u)
        Max=max(Max,a[nod]);
    else
    {
        int mij=(p+u)/2;
        if(st<=mij)
            interogare(2*nod,st,dr,p,mij);
        if(dr>mij)
            interogare(2*nod+1,st,dr,mij+1,u);
    }
}
int main()
{
    fin>>n>>m;
    for(i=1;i<=n;i++)
    {
        fin>>x;
        modificare(1,i,x,1,n);
    }
    for(i=1;i<=m;i++)
    {
        fin>>p>>x>>y;
        if(p==0)
        {
            Max=0;
            interogare(1,x,y,1,n);
            fout<<Max<<"\n";
        }
        else
            modificare(1,x,y,1,n);
    }
    return 0;
}