Cod sursa(job #1379090)

Utilizator CartofenAndrei Cartof Cartofen Data 6 martie 2015 16:14:26
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
using namespace std;

#define NMax 100005
#define f1 (nod<<1)
#define f2 (nod<<1|1)
#define mij ((st+dr)>>1)

ifstream f("arbint.in");
ofstream g("arbint.out");

int n,m;
int A[NMax<<2];

void update(int nod,int st,int dr,int poz,int val)
{
    if(st == dr) {A[nod] = val; return;}

    if(poz <= mij) update(f1,st,mij,poz,val);
    else update(f2,mij+1,dr,poz,val);

    A[nod] = max(A[f1],A[f2]);
}

int query(int nod,int st,int dr,int a,int b)
{
    if(a<=st && dr<=b) return A[nod];

    int q1 = 0, q2 = 0;
    if(a <= mij) q1 = query(f1,st,mij,a,b);
    if(b > mij) q2 = query(f2,mij+1,dr,a,b);
    return max(q1,q2);
}

int main()
{
    int i,x;

    f>>n>>m;
    for(i=1;i<=n;++i)
    {
        f>>x;
        update(1,1,n,i,x);
    }

    int op,a,b;
    while(m--)
    {
        f>>op>>a>>b;
        if(op == 1) update(1,1,n,a,b);
        else g<<query(1,1,n,a,b)<<"\n";
    }

    f.close();
    g.close();
    return 0;
}