Cod sursa(job #281303)

Utilizator mihai.cuculiciCuculici Mihail mihai.cuculici Data 14 martie 2009 11:01:54
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <fstream>
using namespace std;

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

#define NMAX 666013
#define MAX(a,b) ((a>b)?a:b)

int N, M;
int MaxArb[NMAX];
int st, fin, Val, Pos, maxx;
 
void Update(int root, int lo, int hi)
{
     if(lo==hi)
     {
          MaxArb[root] = Val;
          return;
     }
     int mid=lo+(hi-lo)/2;  
     if(Pos<=mid) Update(2*root,lo,mid);
     else         Update(2*root+1,mid+1,hi);
     MaxArb[root]=MAX(MaxArb[2*root], MaxArb[2*root+1] );
}

void Query(int root, int lo, int hi)
{
     if(st<=lo&&hi<=fin)
     {
          if(maxx<MaxArb[root])maxx=MaxArb[root];
          return;
     }
     int mid=lo+(hi-lo)/2;
     if(st<=mid) Query(2*root,lo,mid);
     if(mid<fin) Query(2*root+1,mid+1,hi);
}

int main()
{
    int X, A, B, i;
    f>>N>>M;
    for(i=1;i<=N;i++)
    {
        f>>X;
        Pos = i, Val = X;
        Update(1,1,N);
    }   
    for(i=1;i<=M;i++)
    {
        f>>X>>A>>B;
        if(!X) 
        {
             maxx = -1;
             st= A;
             fin=B;
             Query(1,1,N);
             g<<maxx<<"\n";
        }
        else
        {
            Pos=A;
            Val=B;
            Update(1,1,N);
        }
    }
}