Cod sursa(job #658878)

Utilizator blk.irineluIrina Ursateanu blk.irinelu Data 9 ianuarie 2012 19:08:36
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <fstream>
#define MAX 100001

using namespace std;

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

int n,m, arb[4*MAX+66],op,a,b,val,maxim,S,D,x,poz;

 int maxi(int a,int b)
{
    if(a>b) return a;
    return b;
}

void update(int nod, int s,int d)
{
    if(s==d)
     {
         arb[nod]=val;
         return;
     }
    int M=(s+d)/2;
    if(poz<=M)
     update(2*nod,s,M);
    else
     update(2*nod+1,M+1,d);
    arb[nod]=maxi(arb[2*nod],arb[2*nod+1]);
}

void query(int nod, int s,int d)
{
    if(S<=s&&d<=D)
     {
        if(maxim<arb[nod]) maxim=arb[nod];
        return;
     }
    int M=(s+d)/2;
    if(S<=M) query(2*nod,s,M);
    if(M<D) query (2*nod+1,M+1,d);
}

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

    for(i=1;i<=m;i++)
    {
        f>>op>>a>>b;
        if(op==0)
        {
            maxim=-1;
            S=a;
            D=b;
            query(1,1,n);
            g<<maxim<<"\n";
        }
        else
        {
            poz=a;
            val=b;
            update(1,1,n);
        }
    }
    return 0;
}