Cod sursa(job #2118595)

Utilizator malina2109Malina Diaconescu malina2109 Data 30 ianuarie 2018 19:31:39
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int poz,x,arb[1<<19],n,m,a,b;
void actualizare(int nod, int st, int dr)
{
    if(st>=poz && poz>=dr)
    {
        arb[nod]=x;
        return;
    }
    int    mij=(st+dr)>>1;
    if(poz<=mij)
        actualizare(nod<<1,st,mij);
    else actualizare((nod<<1)+1,mij+1,dr);
    if (arb[nod<<1]<arb[(nod<<1)+1]) arb[nod]=arb[(nod<<1)+1];
       else arb[nod]=arb[nod<<1];

}
int interogare(int nod,int st, int dr)
{
    int m,x1,x2;
    x1=x2=0;
     if (a<=st && dr<=b)
        return arb[nod];
    int mij=(st+dr)>>1;
    if(a<=mij) x1=interogare(nod<<1,st,mij);
    if(b>mij) x2=interogare((nod<<1)+1,mij+1,dr);
    if(x2>x1) x1=x2;
    return x1;
}
int main()
{
    f>>n>>m;
    for(int i=1; i<=n; i++)
    {
        f>>x;
        poz=i;
        actualizare(1,1,n);
    }
    for(int i=1;i<=m;i++)
    {
        int instr;
        f>>instr>>a>>b;
        if(instr==0)
        {
            g<<interogare(1,1,n)<<"\n";
        }
        else
        {
           poz=a;x=b;
           actualizare(1,1,n);
        }
    }
    return 0;
}