Cod sursa(job #1196891)

Utilizator azkabancont-vechi azkaban Data 9 iunie 2014 16:46:06
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.49 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");

int H[500000],n,m,op,a,b,x,i,aux;
 
void actualizare(int nod, int st, int dr, int a, int b,int var)
{
    int mij;
    if (a<=st & b>=dr) H[nod]=var; 
                     else {
                            mij=(st+dr)/2;
                            if (a<=mij) actualizare(2*nod,st,mij,a,b,var);
                            if (b>mij) actualizare(2*nod+1,mij+1,dr,a,b,var);
                            H[nod]=max(H[2*nod],H[2*nod+1]);
                          }
}
 
int interogare (int nod,int st, int dr,int a, int b)
{
    int mij;
    if (a<=st & b>=dr) return H[nod];
                    else {
                           mij=(st+dr)/2;
                           if (a<=mij) return interogare(2*nod,st,mij,a,b);
                           if (b>mij)  return interogare(2*nod+1,mij+1,dr,a,b);
    return max(interogare(2*nod,st,mij,a,mij),interogare(2*nod+1,mij+1,dr,mij+1,b));
                                                                            }
}
 
 
int main()
{
    cin>>n>>m;
    for (i=1;i<=n;i++) { 
                        cin>>aux;
                        actualizare(1,1,n,i,i,aux);
                        }
    for (i=1;i<=m;i++) { 
                       cin>>aux>>a>>b;
                       if (aux==0) cout<<interogare(1,1,n,a,b)<<"\n";
                       if (aux==1) actualizare(1,1,n,a,a,b);
                       }
}