Cod sursa(job #1943991)

Utilizator SkiryFarauanu Ionut Skiry Data 28 martie 2017 21:49:28
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>

using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int arb[1<<19],i,x,poz,m,st,dr,a,b,n,op,em;
void actualizare(int nod,int st,int dr)
{
    if(st>=poz&&dr<=poz)
    {
        arb[nod]=x;
        return;
    }
    m=(st+dr)>>1;
    if(poz<=m) actualizare(nod<<1,st,m);
    else actualizare((nod<<1)+1,m+1,dr);
    arb[nod]=max(arb[nod<<1],arb[(nod<<1)+1]);
}
int interogare(int nod,int st,int dr)
{
    if(st>=a&&dr<=b) return arb[nod];
    int x1=0,x2=0;
    int m=(st+dr)>>1;
    if(a<=m) x1=interogare(nod<<1,st,m);
    if(b>m) x2=interogare((nod<<1)+1,m+1,dr);
    return max(x1,x2);
}
int main()
{
    f>>n>>em;
    for(i=1;i<=n;i++)
    {
        f>>x;
        poz=i;
        actualizare(1,1,n);
    }
    for(i=1;i<=em;i++)
    {
        f>>op>>a>>b;
        if(!op) g<<interogare(1,1,n)<<'\n';
        else
        {
            poz=a;
            x=b;
            actualizare(1,1,n);
        }
    }
    return 0;
}