Cod sursa(job #986931)

Utilizator costyrazvyTudor Costin Razvan costyrazvy Data 19 august 2013 19:39:12
Problema Arbori de intervale Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>

using namespace std;
int v[1<<19],x,y,st,dr,poz,a,b,n,m;
int MAX(int x,int y)
{
    if (x>y) return x;
    return y;
}
inline void actualizare(int nod, int st, int dr)
{
    int mij;
    if (st>=poz && poz>=dr)
        {v[nod]=x;return;}
        else {
    mij=(st+dr)/2;
    if (poz<=mij) actualizare(nod*2,st,mij);
       else actualizare(nod*2+1,mij+1,dr);
    v[nod]=MAX(v[2*nod],v[2*nod+1]);}
}
inline int interogare(int nod, int st, int dr)
{
    int mij,mx1,mx2;mx1=0;mx2=0;
    if (a<=st && dr<=b) return v[nod];
    mij=(st+dr)/2;
    if (a<=mij) mx1=interogare(nod*2,st,mij);
    if (b>mij) mx2=interogare(nod*2+1,mij+1,dr);
    return MAX(mx1,mx2);
}
int main()
{
    ifstream f("arbint.in");
    ofstream g("arbint.out");
    f>>n>>m;int i,op;
    for (i=1;i<=n;i++) {f>>x;
    poz=i;
    actualizare(1,1,n);}
    for (i=1;i<=m;i++)
    {
        f>>op>>a>>b;
        if (op==1) poz=a,x=b,actualizare(1,1,n);
          else g<<interogare(1,1,n)<<'\n';
    }
    f.close();
    g.close();
    return 0;
}